2017-12-23 10 views
0

私の簡単なJavaScriptゲームは、スペースインベーダーのクローンです。JavaScriptのゲームは時間の経過とともに速く始まり、遅くなります

私はp5.jsクライアント側ライブラリを使用しています。

私はゲームをスピードアップしようと多くのことを試みました。

時間がたつにつれて遅くなり、遅くなり、楽しくはありません。

私が持っているすべてのコードを表示するわけではありません。私はすべてのクラスを見せているわけではありませんが、すべてが起こっているメインクラスを示します。

誰かがこれを目にして、大きなことがあれば教えてください。

私はJSに新しくゲームを作っているので、人々がスクリプトで使用するupdate() というものがありますが、私はそれに精通していません。

ありがとうございます。

var ship; 
 
var flowers = []; // flowers === aliens 
 
var drops = []; 
 
var drops2 = []; 
 

 

 
function setup() { 
 
\t createCanvas(600, 600); 
 
\t ship = new Ship(); 
 
\t for (var i = 0; i < 6; i ++) { 
 
\t \t flowers[i] = new Flower(i * 80 + 80, 60); 
 
\t } 
 

 
\t flower = new Flower(); 
 

 
} 
 

 

 
function draw() { 
 
\t background(51); 
 
\t ship.show(); 
 
\t ship.move(); 
 
\t shipDrops(); 
 
\t alienDrops(); 
 
\t dropsAndAliens(); 
 
\t dropDelete(); 
 
\t drop2Delete(); 
 
} 
 

 
\t // if 0 drops, show and move none, if 5, etc.. 
 
\t function shipDrops() { 
 
\t \t \t \t for (var i = 0; i < drops.length; i ++) { 
 
\t \t \t \t drops[i].show(); 
 
\t \t \t \t drops[i].move(); 
 
\t \t for (var j = 0; j < flowers.length; j++) { 
 
\t \t if(drops[i].hits(flowers[j])) { 
 
\t \t \t \t flowers[j].shrink(); 
 
\t \t \t \t if (flowers[j].r === 0) { 
 
\t \t \t \t \t flowers[j].destroy(); 
 
\t \t \t \t } 
 
\t \t \t // get rid of drops after it encounters ship 
 
\t \t \t \t \t drops[i].evaporate(); 
 
\t \t \t } 
 
\t \t \t \t \t if(flowers[j].toDelete) { 
 
\t \t \t // if this drop remove, use splice function to splice out of array 
 
\t \t \t \t \t flowers.splice(j, 1); \t // splice out i, at 1 
 
\t \t \t \t \t } 
 

 
\t \t } 
 
\t } 
 
\t \t 
 
} 
 

 
\t function alienDrops() { 
 
\t \t // below is for alien/flower fire drops 2 
 
\t \t for (var i = 0; i < drops2.length; i ++) { 
 
\t \t \t drops2[i].show(); 
 
\t \t \t drops2[i].move(); 
 
\t \t if(drops2[i].hits(ship)) { 
 
\t \t \t ship.shrink(); 
 
\t \t \t drops2[i].evaporate(); // must evap after shrink 
 
\t \t \t ship.destroy(); 
 
\t \t \t if (ship.toDelete) { 
 
\t \t \t \t delete ship.x; 
 
\t \t \t \t delete ship.y; 
 
\t \t \t } // above is in progress, deletes after ten hits? 
 
\t \t \t 
 
\t \t } 
 

 
\t } 
 
} 
 

 
\t function dropsAndAliens() { 
 
\t var randomNumber; // for aliens to shoot 
 
\t var edge = false; 
 
\t 
 
\t // loop to show multiple flowers 
 
\t for (var i = 0; i < flowers.length; i ++) { 
 
\t \t flowers[i].show(); 
 
\t \t flowers[i].move(); 
 
\t \t // ****************************************** 
 
    \t \t \t randomNumber = Math.floor(Math.random() * (100)); 
 
    \t \t \t \t if(randomNumber === 5) { 
 
\t \t \t \t var drop2 = new Drop2(flowers[i].x, flowers[i].y, flowers[i].r); 
 
\t \t \t \t drops2.push(drop2); 
 
    \t \t \t } 
 

 
\t \t //**************** above aliens shooting 
 

 
\t \t // below could be method, this will ensure the flowers dont 
 
\t \t //go offscreen and they move 
 
\t \t //makes whtever flower hits this space become the farther most 
 
\t \t //right flower, 
 
\t \t if (flowers[i].x > width || flowers[i]. x < 0) { 
 
\t \t \t edge = true; 
 
\t \t } 
 

 
\t } 
 
\t \t // so if right is true, loop thru them all again and reset x 
 
\t \t if (edge) { 
 
\t \t \t for (var i = 0; i < flowers.length; i ++) { 
 
\t \t \t // if any flower hits edge, all will shift down 
 
\t \t \t // and start moving to the left 
 
\t \t \t flowers[i].shiftDown(); 
 
\t \t } 
 
\t } 
 

 

 

 
} 
 

 

 
function dropDelete() { 
 

 
\t for (var i = drops.length - 1; i >= 0; i--) { 
 
\t \t \t if(drops[i].toDelete) { 
 
\t \t \t // if this drop remove, use splice function to splice out of array 
 
\t \t \t \t drops.splice(i, 1); \t // splice out i, at 1 
 
\t \t \t } 
 

 
\t \t } 
 

 
} 
 

 
function drop2Delete() { 
 
\t \t for (var i = drops2.length - 1; i >= 0; i--) { 
 
\t \t \t if(drops2[i].toDelete) { 
 
\t \t \t // if this drop remove, use splice function to splice out of array 
 
\t \t \t \t drops2.splice(i, 1); \t // splice out i, at 1 
 
\t \t \t } 
 
    \t \t } 
 

 
} 
 

 

 
function keyReleased() { 
 
\t if (key != ' ') { 
 
\t ship.setDir(0); // when i lift the key, stop moving 
 
\t } 
 
} 
 

 
function keyPressed() { 
 
\t // event triggered when user presses key, check keycode 
 
\t if(key === ' ') { 
 
\t \t var drop = new Drop(ship.x, height); // start ship x and bottom of screen 
 
\t \t drops.push(drop); // when user hits space, add this event to array 
 
\t } 
 

 

 
\t if (keyCode === RIGHT_ARROW) { 
 
\t \t // +1 move right 
 
\t \t ship.setDir(1); 
 
\t } else if (keyCode === LEFT_ARROW) { 
 
\t \t // -1 move left 
 
\t \t ship.setDir(-1); 
 
\t } // setir only when pressing key, want continuous movement 
 
}

+1

デルタタイム計算を使用する必要があります。https://stackoverflow.com/questions/13996267/loop-forever-and-provide-delta-time – pokeybit

+0

スニペットが機能しません。 –

答えて

3

代わりに、我々は実行することはできません切断スニペットのMCVEを投稿してください。これはではなく、があなたのプロジェクト全体であることに注意してください。それは、余分なコードなしで問題を示している小さな例のスケッチでなければなりません。

しかし、何が起こっているのか把握するには、デバッグプログラムが必要です。

  • どのアレイの長さはどれくらいですか?彼らは時間の経過とともに絶えず成長していますか?
  • 実際のフレームレートはどのくらいですか?フレームレートが低下していますか、それとも遅くなっていますか?
  • どの時点で遅くなりますか?異なる値をハードコーディングして、何が起こっているのかを確認してください。

私はこれらの質問に対する答えを教えてくれることはありません。これらはあなた自身に尋ねる必要がある質問です。 (Stack Overflowに関する質問を投稿する前に、実際にはこれらの回答がすべてあるはずです)

まだ理解できない場合は、MCVEを新しい質問の投稿に投稿してくださいそこから。がんばろう。

関連する問題