mousemoveを使わずにマウスカーソル位置を取得するには?
[上に]
[前に]
[次に]
レドンド
2000/05/28(日) 01:34:20
急務です。よろしくお願い致します。
javascriptでマウスカーソル位置を取得したいのですが、mousemoveを
使うと移動させているレイヤーがカクカクに止まってしまいます。
mousemoveを使わずにカーソル位置を取得できる方法を知りませんか?
やりたいことは要するにマウスの位置を取っても他の処理がスムーズ
にいってればいいんですが…。
お分かりの方がいらっしゃいましたら、お願い致します。
shingo
[E-Mail]
[HomePage]
2000/05/28(日) 03:07:33
おそらく環境はネットスケープを想定してるんじゃないかと思うんですが、
onmousemove以外にマウス位置を取得する事は出来ないんじゃないかと思い
ます。
setTimeoutとかを使ってコンスタントに呼び出す関数で、マウス位置を取得
してもいいかと思いますが、逆に重くなりそうだし…
Maja
[E-Mail]
2000/05/28(日) 20:36:47
少し、回答とはかけ離れますが...
かくかくするのは、おそらく、onmousemoveが頻繁に呼び出され、その都度処理が行われるからでしょう。
以下のやり方を参照にしてください。可否はわかりませんが。
mousemoveで位置を調べる
↓
前回の位置と比べる
↓
一定値以上の差(20〜50pxぐらいかな)があるときだけ処理を行い前回の位置変数を書き換える
ていうのでどうでしょう
ある程度かくかくはしなくなると思いますよ。
レドンド
2000/05/29(月) 00:40:37
shingoさん、Majaさん、ありがとうございます。
Majaさんのご指摘なのですが、やろうとしていることがマウスを
動かしてプレイするゲームなので、どうしても常にマウス動かし
まくってる感じなんですよね。弱りました。
shingoさん、お聞きしたいのですが、
>setTimeoutとかを使ってコンスタントに呼び出す関数で、
>マウス位置を取得してもいいかと思いますが、
>逆に重くなりそうだし…
というのはどのような方法でマウス位置を取得するのでしょうか?
コンスタントに呼び出す関数が既に存在しているので、
そこに組みこむみたいな形でどうですかね?
取得方法だけよかったら教えて下さいませんか?
お二人ともありがとうございました。
Maja
[E-Mail]
2000/05/30(火) 00:43:19
やっぱり、だめですか。
でも、onmousemoveで位置取得しているだけなら、ぜんぜん早いはずですが。
ためしに、status行にmouseのxy座標表示させたらきちんと計測してくれます。
追従性もいいはずです。
function getmouse(e) {
if (whatI) { // IE
mouseX= event.clientX+document.body.scrollLeft;
mouseY = event.clientY+document.body.scrollTop;
}
if (whatN) { // NN
mouseX = e.pageX;
mouseY = e.pageY;
}
// おまけ
window.status = mouseX+","+mouseY
}
たぶんこんな感じで、取得してると思うのですが...
つまり、onmousemove自体の問題ではなく、その後の演算やレイアの移動などの処理が重いということです。
そこで、前回の回答になったわけです。
具体的には、たとえば上のスクリプトに
if ((Math.abs(mouseX-mouseXX)>20)||(Math.abs(mouseY-mouseYY)>20) {
mouseXX = mouseX;
mouseYY = mouseY;
return true;
}
else {
return false;
}
と付け加えて、いままでのスクリプト(onmousemoveで呼び出してる関数)を
function imamade(e) {
if (getmouse(e)) {
いままでの処理
}
}
というような感じにするということです。(わかりにくいかな)
細かい動きの関係ない、マウスストーカくらいならこれで十分なんですけどね。
ゲームじゃちょっと難しそうかな。
あまり、答えになってなくてすみません。
shingo
[E-Mail]
[HomePage]
2000/05/30(火) 13:55:06
確かに、onmousemove自体に重くなる原因があるとは考えづらいです。
自分の作ったもので申し訳ないのですが、
http://shingo.org/toys01.html
を作っていたときに気づいた点として
・IE4よりもIE5のほうが断然早い
・Windows9xやNTよりも2000のほうが格段に早い
が挙げられます…いろんな環境でみてみたのですがクライアントの環境に左右
される可能性が高いと思うのです。
あとは、思いつく限りではonmousemoveで呼び出す関数は、グローバル変数
にマウス座標を代入するだけの単純な物にして、コンスタントに呼び出す関数
を別に作って(setTimeoutを使って)その関数からグローバルな変数を参照し
てマウス位置を取得、みたいなカンジでしょうか...
レドンド
2000/05/30(火) 22:47:50
すいません。説明不足でした。
実はレイヤーのドラッグ処理をしているのです。
ドラッグで弾をかわすみたいなもんなんですけど。
>あとは、思いつく限りではonmousemoveで呼び出す関数は、グローバル変数
>にマウス座標を代入するだけの単純な物にして、コンスタントに呼び出す関数
>を別に作って(setTimeoutを使って)その関数からグローバルな変数を参照し
>てマウス位置を取得、みたいなカンジでしょうか...
の方でちょっとやってみます。あまりきれいなドラッグにはならないかも
しれないですけどね…。
でもありがとうございます。もし何かいいアイデアをお持ちの方がいらっしゃるかも
知れないので、チェックはしません。ありがとうございました。
[上に]
[前に]
[次に]