0

私は HTML5 でキャンバス ゲームを作成してきましたが、その多くは初めてです。要素の作成にも JavaScript のみを使用したいと考えています (この方法で他のサイトに埋め込む方が簡単で、よりクリーンだと思います)。もう一度プレイするためにゲームをリロードしましたが、ゲームがまだ行きます。また、「パワーアップ」など、スクリプトで「記憶」する必要があるものも追加します。

とにかく、ここで私の質問です。あるプレーヤーが別のプレーヤーを殺すと、ゲームはしばらくの間自動的に再生され、ページをリロードするまでコンピューターが非常に遅くなります。なぜこれを行うのですか?メイン関数 (ゲームをループし、すべてを実行し続ける) の間隔をクリアしましたが、これによりすべての動きが停止していましたが、もはや停止しません。ここで何が問題なのですか?

これは私のゲームです: http://dl.dropbox.com/u/11168436/game/game.html

コントロール: スキーヤーを矢印キーで動かし、M で撃ちます (最後に移動した方向に撃ちます)。スノーボーダーは ESDF で移動し、Q でシュートします。

御時間ありがとうございます。

4

2 に答える 2

4

さて、基本的に何が起こっていたのか、可変間隔はさまざまなスコープに存在していました。したがって、間隔をクリアしようとしました..しかし、それは正しいスコープではなかったため、varintervalは実際にはクリアされませんでした (また、間隔をクリアするために誤った構文を使用していました)。

ワーキングデモ

関数スコープについてもっと学ぶべきです。いくつvar intervalかの異なる場所にありました。1 つはグローバルで、もう 1 つは関数内のローカルです。これにより、interval という名前の 2 つの個別の変数が作成されます。簡単な例を次に示します。

var a = 10;
function(){
    var a = 1;
    console.log(a);
   // a will equal 1

}

console.log(a);
// a will equal 10

とにかく、それを修正するために私がしたことはグローバル変数として宣言されてintervalおり、その変数はectをクリアするために現在使用されている唯一のものです。

私が見た次の問題は、あなたが使用していたことです

interval = window.clearInterval(interval)

あなたは電話するだけです

window.clearInterval(interval)

その良い最初の試みは、学び続けるだけです:)。実際の例で私が何をしたかを理解していただければ幸いです。コードと比較してください。変数のスコープに関連するわずかな違いしかありません。interval

于 2012-04-05T01:47:51.597 に答える
0

これらの行が原因である可能性があります。

var interval = window.setInterval(main, 1);

その間隔を上げて、30、と言うと、問題は解決するはずです。

于 2012-04-04T23:23:26.687 に答える