2012-03-25 6 views
0
bgY += (enemySpeed + heroSpeed)/2; 
ctx.drawImage(bg, bgX, bgY - gameHeight); 
ctx.drawImage(bg, bgX, bgY); 
if(bgY > gameHeight) 
{ 
    bgY = 0; 
} 

私のキャンバスに背景を描画するために、上記のコードを使用しています。CANVAS:SHMUP背景図

新しい画像が描画されるたびに小さなラグを除いてはうまくいきます。それが描かれる直前に、プレーヤーは、背景が一番上に2番目の画像を持たない様子を見ることができます。 (それは私の主な問題ではないのですが、あなたはあまりにもそれを支援することができます)とにかく

を、今主な問題のために:

私はわからないんだけど、私はイメージが、彼らは、キャンバスの下に移動しているときだと思います実際には削除されません。ゲームを遅くするか、しばらくすると性能が低下しますか?

これを防ぐ方法はありますか?

+0

「画像はキャンバスの下に移動する」または「実際には削除されていません」とはどういう意味ですか? – Howard

+0

最初のコード行 "bgY + =(enemySpeed + heroSpeed)/ 2;"は、bgY点が下に移動したことを意味します。つまり、新しい背景イメージが描画されるとき、以前よりも低くなります。ポイントがキャンバスの下に来ると、bgYを0に設定します。これは、再び上から描画を開始することを意味します。しかし、キャンバスの下にある画像(既に描画されているもの)はキャンバスの下にまだ残っていますが、見ることはできません。 –

+0

ああ、今私は参照してください。画像を描画することは、描画前にキャンバスの境界に関して画像を切り取るように(キャンバスの合理的な実装に対して)最適化されます。これはパフォーマンスにはほとんど影響を与えませんが、あなたが見ることはありません(そして測定することさえほとんどありません)。 – Howard

答えて

0

あなたの最初の質問について:ifステートメントはdrawImageへの呼び出しの直前でなければなりません。また、モジュロ演算で置き換えることもできます。モジュロ演算は、関連するすべてのケースを除いて保存する必要があります。

bgY += (enemySpeed + heroSpeed)/2; 
bgY %= gameHeight; 
ctx.drawImage(bg, bgX, bgY - gameHeight); 
ctx.drawImage(bg, bgX, bgY); 
+0

ええ、それは一時的な透明性に役立ちます。ありがとう。 –