Javascript 调整这个RPG战斗循环?

Javascript 调整这个RPG战斗循环?,javascript,node.js,Javascript,Node.js,客户端和服务器都是用Javascript编写的。我没有游戏主循环,因为战斗很少发生,游戏中没有其他需要循环的东西。当两名玩家开始战斗时,他们进入如下自动攻击循环: if ( combat key is pressed ) { check a bunch of stuff; setTimeout( combatLoop(); 5000 ); } combatLoop = function() { attack(player1,player2); var l

客户端和服务器都是用Javascript编写的。我没有游戏主循环,因为战斗很少发生,游戏中没有其他需要循环的东西。当两名玩家开始战斗时,他们进入如下自动攻击循环:

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()函数。skill函数可能会也可能不会再次调用combatLoop

问题1

我对Javascript非常陌生,我想知道你们这样做是否发现了任何重大缺陷

问题2


我还没有看到任何类似的例子,我正在尝试做什么,所以我有点黑客技能按钮部分一起。以这种方式(技能按钮按下=>设置技能变量=1)让战斗循环“倾听”技能按钮并使用clearTimeout清除主循环是否“错误”?所以,技能在下一次攻击中被执行(不是在两次攻击之间),这对我来说很好。不知道行业标准是什么:p

您可以这样做,尽管我不太喜欢
setInterval()

您还可以:


因此,您需要听一个
按键
,将
XX
替换为技能键的keycode-然后清除超时循环…:/

我想你的代码和我的差不多吧?尽管更有组织。我在谷歌上搜索了一下setInterval和setTimeOut,得出的结论是setTimeOut优于setTimeOut,但这只是一个小细节。谢谢更新为包含
setTimeout()
而不是
setInterval()
^\u^-我正在重新分配Combatimer,但这没关系;)非常感谢你的帮助^__^
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()            
    }        
});