2012-04-04 132 views
0

我一直在用HTML5製作一個帆布遊戲,並且對它來說很新。我想單獨使用javascript來創建我的元素(以這種方式嵌入到其他站點更容易,我覺得它更乾淨)。我爲了再次玩遊戲而重新加載了遊戲,但我希望能夠跟蹤分數和多個其他變量,而不必將每個變量都放入URL中(我一直在這樣做),使其看起來像遊戲一樣仍在繼續。我還將添加「大功告成」以及其他需要由腳本「記住」的事情。我的遊戲自己玩?

無論如何,這是我的問題。當一個玩家殺死另一個玩家時,遊戲會自動播放一段時間,並使我的電腦非常慢,直到我重新加載頁面。它爲什麼這樣做?我清除了主函數的時間間隔(循環遊戲並保持所有內容都在運行),並用於使所有內容停止移動 - 它不再執行。這裏有什麼問題?

這是我的遊戲:http://dl.dropbox.com/u/11168436/game/game.html

控制:移動箭頭鍵滑雪者,並以M拍攝(你,你去年在移動的方向拍攝)。滑雪者隨着ESDF移動並用Q拍攝。

感謝您的時間。

回答

0

這些線路可能是罪魁禍首:

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

把那個間隔多達說,30,你的問題應該消失。

+0

沒有運氣。一切都像以前一樣嗡嗡作響。 – sc8ing 2012-04-04 23:44:58

+0

@sc8ing黨。檢查遞歸函數調用。 – 2012-04-04 23:46:26

+0

什麼是遞歸函數調用? – sc8ing 2012-04-04 23:54:26

4

好吧,繼承人基本上發生了什麼,可變區間存在於不同的範圍。所以你試圖清除間隔..但它不是正確的範圍,所以var interval真的永遠不會被清除(也是你使用不正確的語法來清除間隔)。

Working Demo

你應該瞭解function scope。你在幾個不同的地方有var interval,一個是全球的,一個是本地的一個功能。這會創建兩個名爲interval的獨立變量。下面有一個簡單的例子,

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