2017-05-23 3 views
0

だから私はフラッディーな鳥のゲームを作成しています(このゲームが何であるか分かっていると、私の言うことを理解するのがずっと簡単になります)。パイプの1つは最低y値(600px)にあり、1つはay値0で始まります。したがって、これらのパイプは基本的に反対のy値を持ちますが、同じX値を持ちます(X値も移動しますが、 Xの)。パイプの高さもランダムに生成されます。 ここから始めて質問:私はこのコードのためにチューブXのピクセル数を移動した後(時間間隔も機能する可能性があります)、別のパイプセットを追加してその値を同じにします。しかし、古いパイプの価値は同じままでなければなりません。私はいくつかの並べ替えの配列が最高だと思うが、私のJavaScriptコード作成能力はかなり低く、私はそれを見るまで私のコードにそのようなものを実装する手掛かりを持っていないだろう。関数を何度も呼び出すことはできますが、以前の値をリセットすることはできませんか?

コードのこのビットはランダムな高さを生成する:

function pipeY() { 
    var top = Math.random() * -32 + 1; 
     height1 = top * 10; 
    var bottom = Math.random() * 32 + 1; 
     height2 = bottom *10 
     loop(); 
     } 

これは、パイプの移動X値を作成:

tubeX = 400; 
velocityX = 0; 
force = -0.5; 
function pipeX() { 
    velocityX += force; 
    velocityX *= 0.9; 
    tubeX += velocityX; 
} 

これは、互いに逆である2本のパイプ作成:

function show() { 
    var tubeHeight1 = 600; 
    var tubeHeight2 = 0; 
    ctx.fillStyle="green"; 
    tube1 = ctx.fillRect(tubeX,tubeHeight1,5,height1); 
    tube2 = ctx.fillRect(tubeX,tubeHeight2,5,height2); 
    ctx.stroke(); 
    } 
+0

あなたは 'pipeX + = velocityX'を実行するときに、そのインスタンス*に影響を与えているだけなので、パイプのインスタンスを別にする必要があります。次のパイプには 'tubeX'という独自の値があります。 – Jamiec

+0

私はいくつかのコードで実験していたとき、パイプがn個のピクセルの後に積み重なっているのを見ましたが、私は確信していませんでした。 –

+0

ヘルプが必要な場合は[mcve]を入力してください。 – Jamiec

答えて

0

私がやったことは、pipeX()関数の中にwhileループを作成することでした。また、tubeXの値を800に変更したので、400 pxで効率的に新しいパイプを作成できます。これはおそらく最も効率的な方法ではありませんが、それはよく見えます!

function pipeX() { 
var lastTime = 0; 
velocityX += force; 
velocityX *= 0.9; 
tubeX += velocityX; 

while (tubeX < -25) { 
show(); 
if (tubeX = 400) { 
    new pipeY(); 
    new show(); 
    } 
    } 
} 
関連する問題