2012-06-28 32 views
3

客戶端+服務器都是用Javascript編寫的。我沒有一個主遊戲循環,因爲戰鬥很少發生,遊戲中沒有其他東西需要循環。當兩個玩家發起戰鬥,他們進入了自動攻擊循環是這樣的:調整這個RPG戰鬥循環?

if (combat key is pressed) { 

    check a bunch of stuff; 
    setTimeout(combatLoop(); 5000); 

} 

combatLoop = function() { 

    attack(player1,player2); 

    var loop = setTimeout(combatLoop(); 5000); 

    if (skill variable == 1) { clearTimeout(loop); skill(); } 

} 

所以,combatLoop函數被調用了一遍又一遍,每5秒。攻擊函數處理兩個輸入玩家互相攻擊時發生的情況。如果玩家使用技能,則使用clearTimeout退出循環,並調用相關的skill()函數。技能功能可以或不可以再次調用combatloop。

問題1

我非常新的JavaScript,我想知道,如果你們看到做這種方式的任何重大缺陷?

問題2

我還沒有看到什麼,我試圖做任何類似的例子,所以我還挺技能鍵部分劈在一起。讓技能循環「聽」技能按鈕這樣按下(技能按鈕按=>設置技能變量= 1)是否「錯誤」,並使用clearTimeout清除主循環?所以,技能在下次攻擊中得到執行(不在兩次攻擊之間),這對我來說很好。不知道工業標準是什麼。 :P

回答

0

你能做到這一點,雖然我不是setInterval()大風扇:

if (keypressed) { //change this to a proper event handler ;) 
    Engine.combatStart(); 
} 

var Engine = { 
    combatTimer: null, //timer var 
    combatStart: function() { 
    Engine.combatTimer = setTimeout(Engine.combatLogic, 5000); 
    }, 
    combatLogic: function() { 
    //calculate attacks etc... 

    if (skill === 1) { 
     clearTimeout(Engine.combatTimer); 
     skill(); 
    } 

    Engine.combatTimer = setTimeout(Engine.combatLogic, 5000); 
    } 
}; 

你還可以:

document.addEventListener("keypress", function(e) { 
    if (e.keyCode === XX) { 
     clearTimeout(Engine.combatTimer); 
     skill()    
    }   
}); 

所以你聽一個keypress,替換XX與技能密鑰的鍵碼 - 然後清除超時循環...:/

+0

我想你的鱈魚e和我幾乎一樣?儘管組織得多。我做了一些關於setInterval和setTimeOut的搜索,並得出結論,setTimeOut是優越的,但這是一個小細節。謝謝! – Legendre

+0

已更新爲包含'setTimeout()'而不是'setInterval()'^ _^- 我正在重新分配combatTimer,但沒關係;) –

+0

非常感謝您的幫助。^__ ^ – Legendre