第二次调用后,setInterval不会停止

时间:2014-08-20 22:47:52

标签: javascript jquery setinterval

我目前正在研究战斗系统。 健康每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);
        });
    });

感谢您的帮助,我无助。

1 个答案:

答案 0 :(得分:3)

使用您的代码,每次点击 .raid_building时,您都会为#startRaid上的点击设置处理程序。这意味着,如果点击两次.raid_building,您就会#startRaid点击两个处理程序,这两个处理程序都会启动一个新的间隔计时器。您的frameStop变量只包含其中一个变量的句柄;另一个将继续。当然,第三次点击会使问题更加复杂(您将拥有三个click处理程序,每个处理程序都会启动一个新的间隔计时器)。等等...

将代码挂钩click #startRaid 外部 .raid_building上的点击处理程序。