客户端+服务器都是用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
答案 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
- 然后清除超时循环...:/