我目前正在研究战斗系统。 健康每200毫秒计算一次,我使用间隔计算。它工作得很好,直到我开始游戏 - 间隔再次。它不再停止了。
这是很多代码 - 我在这里也有一个在线现场演示http://wernersbacher.de/pro/coinerdev/
像我说的那样 - 工作第一,但不是第二。所以,只是主要代码:
var frameStop;
// Draws Startscreen
function showStartRaid(name) {
playerBTC = btc;
playerBTCs = btcs;
playerName = nick;
// Sets stats for called level
enemyBTC = dun[name]["buyer"]["btc"];
enemyBTCs = dun[name]["buyer"]["btcs"];
enemyName = dun[name]["buyer"]["label"];
enemyNum = dun[name]["meta"]["base"];
/* Reset everything in html */
}
var battle = false;
$(".raid_building").click(function() {
//Draws level
showStartRaid(name);
//Sets start BTC as fighting stats (they will decrease during battle)
fplayerBTC = playerBTC;
fenemyBTC = enemyBTC;
//Click on "Start"
$("#startRaid").click(function() {
function raiden() {
//Calculates fighting
fenemyBTC -= playerBTCs/frameMinus;
fplayerBTC -= enemyBTCs/frameMinus;
/*Draws stats and health here in html */
if(fplayerBTC >= 0 && fenemyBTC >= 0)
console.log("battle goes on")
else {
//If battle is over, stop it
clearInterval(frameStop);
}
}
//Start battle
frameStop = setInterval(raiden, frameRaid);
});
});
感谢您的帮助,我无助。
答案 0 :(得分:3)
使用您的代码,每次点击 .raid_building
时,您都会为#startRaid
上的点击设置新处理程序。这意味着,如果点击两次.raid_building
,您就会#startRaid
点击两个处理程序,这两个处理程序都会启动一个新的间隔计时器。您的frameStop
变量只包含其中一个变量的句柄;另一个将继续。当然,第三次点击会使问题更加复杂(您将拥有三个click
处理程序,每个处理程序都会启动一个新的间隔计时器)。等等...
将代码挂钩click
#startRaid
外部 .raid_building
上的点击处理程序。