私はキャンバスゲームに取り組んでおり、これを達成するためにオブジェクトとメソッドを使用しようとしています。今、私はそれで問題に遭遇しました。説明するのはちょっと難しいです。基本的に、ランダムに動き回ると思われる正方形がたくさんあります。squareオブジェクト内のメソッドは、setIntervalメソッドを使用して、1/10秒ごとに正方形を移動します。10秒ごとに新しい正方形が追加されます。新しい正方形が追加されると、問題が発生します。1マスを除くすべてが移動します。他の人は凍ります(そうすべきではありません)。私はそれを十分に説明できることを願っています、ここに問題のある領域があります。
function enemy(clr, cx, cy) {
this.color = clr;
this.cordX = cx;
this.cordY = cy;
this.move = function() {
color = this.color;
cordX = this.cordX;
cordY = this.cordY;
setInterval(function() {
var direction = Math.floor(Math.random() * 4);
switch (direction) {
case 0:
if (cordX + 20 <= 480) {
context.clearRect(cordX, cordY, 20, 20);
cordX = cordX + 20;
context.fillStyle = color;
context.fillRect(cordX, cordY, 20, 20);
}
break;
case 1:
if (cordX - 20 >= 0) {
context.clearRect(cordX, cordY, 20, 20);
cordX = cordX - 20;
context.fillStyle = color;
context.fillRect(cordX, cordY, 20, 20);
}
break;
case 2:
if (cordY + 20 <= 480) {
context.clearRect(cordX, cordY, 20, 20);
cordY = cordY + 20;
context.fillStyle = color;
context.fillRect(cordX, cordY, 20, 20);
}
break;
case 3:
if (cordY - 20 >= 0) {
context.clearRect(cordX, cordY, 20, 20);
cordY = cordY - 20;
context.fillStyle = color;
context.fillRect(cordX, cordY, 20, 20);
}
break;
}
}, 100);
}
}
と正方形の作成者:
var newEnemy = new enemy("rgb(" + Math.floor(Math.random() * 200) + "," + Math.floor(Math.random() * 200) + "," + Math.floor(Math.random() * 200) + ")", Math.floor(Math.random() * ((500 - 0) / 20)) * 20 + 0, Math.floor(Math.random() * ((500 - 0) / 20)) * 20 + 0);
newEnemy.move();
enemyNum = enemyNum + 1;
}, 10000);
ここで実際の動作を見ることができます
各正方形が追加されると、動きがますます不安定になることに注意してください。
関数var color, cordX, cordY
内で忘れていました。this.move
つまり、これらの変数はグローバルになり、各正方形は、それ自体ではなく最後の正方形でのみ機能します。これが、1つの正方形だけが移動する理由です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加