调整这个RPG战斗循环?

时间:2012-06-28 12:35:54

标签: javascript node.js

客户端+服务器都是用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(); }

}

因此,每5秒就会反复调用一次combatLoop函数。攻击函数处理当两个输入玩家互相攻击时发生的事情。如果玩家使用技能,则使用clearTimeout退出循环,并调用相关的skill()函数。技能功能可能会或可能不会再次调用combatLoop。

问题1

我是Javascript的新手,我想知道你们是否看到这样做的任何重大缺陷?

问题2

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

1 个答案:

答案 0 :(得分: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 - 然后清除超时循环...:/