2012-04-04 14 views
0

私はHTML5でキャンバスゲームを作ってきましたが、その多くは新しいものです。私は自分の要素を作成するためにjavascriptだけを使用したいと思っています(この方法で他のサイトに埋め込むほうが簡単です)。私はゲームを再ロードするためにゲームをリロードしましたが、ゲームのように見せるためにURL(これまで行っていたもの)にそれぞれ入れなくても、スコアやその他の複数の変数を把握できるようにしたいまだ行きます。また、スクリプトによって記憶される必要のある「パワーアップ」やその他のものを追加します。私のゲームは自分自身を果たしていますか?

とにかく、ここに私の質問です。 1人のプレイヤーが別のプレイヤーを殺すと、ゲームはしばらくプレイされ、ページをリロードするまではコンピューターが非常に遅くなります。なぜこれをやっているのですか?私は主な機能(ゲームをループしてすべてを動かす)のための間隔をクリアし、これはすべてが動くのを止めるために使われました。ここで何が間違っていますか? http://dl.dropbox.com/u/11168436/game/game.html

規制:(あなたが最後で動いていた方向に撃つ)矢印キーを使用してスキーヤーを移動し、Mで撮影

は、これが私のゲームです。スノーボーダーはESDFで移動し、Qで撮影します。

ありがとうございました。

答えて

0

これらの行が犯人かもしれ:

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

は、言うまでその間隔を持参30、そしてあなたの問題が離れて行く必要があります。

+0

いいえ運がありません。前と同じようにすべてが騒がれました。 – sc8ing

+0

@ sc8ing Dang。再帰関数呼び出しを確認します。 –

+0

再帰関数呼び出しとは何ですか? – sc8ing

4

基本的に何が起きていたのか、さまざまな範囲で可変間隔が存在しました。したがって、間隔をクリアしようとしていましたが、正しいスコープではないため、intervalは本当に決してクリアされませんでした(間隔をクリアするために不正な構文も使用していました)。

Working Demo

あなたはfunction scopeについての詳細を学ぶ必要があります。いくつかの異なる場所にvar intervalがありました。グローバルに1つ、ローカルに1つの機能があります。これは、intervalという2つの別個の変数を作成します。 HERESに簡単な例、

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

} 

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

は、とにかく、私はそれを修正するために何をしたかintervalのグローバル変数を宣言して、その変数は、電気ショック療法をクリアするために今使用される唯一のものです。私が見た

次の問題は、あなたが唯一の

window.clearInterval(interval)

そのちょうど:)を学んでおく良い最初の試みを呼び出す必要が

interval = window.clearInterval(interval)

を使用していたです。うまくいけば、あなたは私が実際の例で何をしたのかを理解することができますちょうどあなたのコードと比較すると、あなたの変数の範囲に関連するすべてのわずかな違いがあります。interval

関連する問題