3

客户端+服务器都是用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() 函数。技能函数可能会或可能不会再次调用战斗循环。

问题 1

我对 Javascript 很陌生,我想知道你们是否发现这样做有什么重大缺陷?

问题2

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

4

1 回答 1

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技能键的键码替换 - 然后清除超时循环......:/

于 2012-06-28T12:52:24.713 回答