2016-05-14 5 views
0

私はキャンバスゲームに取り組んできましたが、これを達成するためにオブジェクトとメソッドを使用しようとしてきました。今私はそれに問題を抱えている。説明するのは難しいです。基本的にランダムに動き回るはずの正方形の束があります。正方形オブジェクトの内部のメソッドは、setIntervalメソッドを使用して1/10秒ごとに正方形を移動します。 10秒ごとに新しい四角形が追加されます。新しい広場が追加されると、問題が発生します。 1平方を除いてすべて移動します。他の人は凍っている(彼らは凍ってはならない)。私はそれが十分に説明できることを願っています、ここでは問題の領域です。SetIntervalはjavascriptオブジェクトで変わっています

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); 

あなたはアクションで、それに動きが追加された各四角でますます不安定に取得する方法here

答えて

2

お知らせを見ることができますか?

あなたの関数で忘れてしまったのは、これらの変数がグローバルになっていることを意味し、各四角形は、それ自身の代わりに最後の四角形にのみ作用します。これが1つの正方形だけが移動する理由です。

関連する問題