setIntervalに問題があります。私の試合では、矢を撃つことができるようにしたいが、彼が撃つたびに矢印が速く進んでいる!だから、一般的な考え方は、矢印が1秒間飛行し、その後、削除されるということであるこのsetInterval問題を解決するにはどうすればよいですか?
arrows = [];
Arrow = function(x, y, followX, followY) // (player.x, player.y, followX, followY)
{
ar = this;
ar.rect = [x, y, 28, 3];
ar.x = x;
ar.y = y;
ar.followX = followX;
ar.followY = followY;
if(ar.followY - ar.y < 0)
{
ar.where = [-(((ar.followX - ar.x)/200)/((ar.followY - ar.y)/200)), -1];
}
else
{
ar.where = [(((ar.followX - ar.x)/200)/((ar.followY - ar.y)/200)), 1];
}
ar.flying = setInterval(function()
{
ar.rect[0] += ar.where[0]/10;
ar.rect[1] += ar.where[1]/10;
}, 1);
ar.fall = setTimeout(function()
{
for(a = 0; a < arrows.length; a++)
if (arrows[a] == ar)
{
clearInterval(ar.flying);
arrows = sliceHere(arrows, a);
}
}, 1000);
}
: これは矢印のコンストラクタです。
これが作成されますどのようにして矢印されています。その後
fireArrow = function(player)
{
arrows.push(new Arrow(player.rect[0] + player.rect[2] - 1, player.rect[1] + player.rect[3]/2 - 10, player.rect[0] + player.mouse.x - sx/2, player.rect[1] + player.mouse.y - sy/2));
}
を、私は、画面上の矢印を描いてる、私もいつも同じ場所から発射し、同じ方向に移動します。あなたのa
ループカウンタ用
var ar = this;
と同じに:これが唯一の問題ですが、この行を変更する必要がある場合
本当に1ミリ秒をsetIntervalに入れたいですか? – erturne
@erturne - 良い点。私は私の答えで言及することを忘れていましたが、はい、ブラウザは実際には1ms間隔を与えるつもりはありません。 – nnnnnn
私は知っていますが、これはノードを使用して実行されます) – corazza