Javascript突围游戏。以分数间隔改变球速

时间:2016-12-04 22:48:57

标签: javascript if-statement intervals breakout

我正在寻找一些帮助,在Tumult Hype中使用Javascript添加一些Breakout游戏的代码。我希望这样做,一旦你达到一定的分数,球的速度就会增加。

这是迄今为止没有速度助推器的代码。

var input1 = event.which || event.keyCode;

if ((input1 == "37") && (window.setLoopLeft == false)) { // LEFT ARROW PRESSED
    window.setLoopLeft = true;
    window.intervalLeft = setInterval(moveLeft, 5);
} else if ((input1 == "39") && (window.setLoopRight == false)) { // RIGHT ARROW PRESSED
    window.setLoopRight = true;
    window.intervalRight = setInterval(moveRight, 5);
} else if ((input1 == "32") && (window.ballLaunched == false)) { // SPACE BAR PRESSED
    window.ballLaunched = true;
    // RUN THE MOVEBALL FUNCTION EVERY 10 MILLISECONDS
    window.intervalMoveBall = setInterval(moveBall, window.ballSpeed);
}

function moveBall() {
    var ballLeft = parseInt(hypeDocument.getElementById("ball").style.left);
    var ballTop = parseInt(hypeDocument.getElementById("ball").style.top);

这是我要添加的代码。现在我计划的是创建一个全局变量来应用于window.intervalMoveBall。然后我会编写一个新功能,可以检测1000点的分数值,并使球的速度加倍,使其每5毫秒而不是10分钟移动。

现在我不知道该怎么做才是编写if语句以便检测得分值。我想知道是否有人可以告诉我如何正确,甚至可以告诉我是否使用带有if语句的全局和新函数甚至可以用于此。

1 个答案:

答案 0 :(得分:0)

您当前正在使用setInterval,因此要更改清除原始间隔所需的时间间隔,并使用新的时间间隔启动新的时间间隔。一个更简单的方法是使moveBall函数负责使用setTimeout调用自身(对于moveLeft和moveRight也是如此),就像这样......

var input1 = event.which || event.keyCode;

if ((input1 == "37") && (window.setLoopLeft == false)) { // LEFT ARROW PRESSED
    window.setLoopLeft = true;
    window.intervalLeft = setInterval(moveLeft, 5);
} else if ((input1 == "39") && (window.setLoopRight == false)) { // RIGHT ARROW PRESSED
    window.setLoopRight = true;
    window.intervalRight = setInterval(moveRight, 5);
} else if ((input1 == "32") && (window.ballLaunched == false)) { // SPACE BAR PRESSED
    window.ballLaunched = true;
    moveBall();
}

function moveBall() {
    setTimeout(moveBall, window.ballSpeed);
    // the rest of your moveBall function
}

这意味着我们可以在每次moveBall运行时设置不同的时间跨度,并使用一些条件逻辑,例如,

function moveBall() {
    setTimeout(moveBall, window.score > 1000 : 5 ? 10);
    // the rest of your moveBall function
}

显然这是一个无限循环,所以你还想添加一些方法来阻止它,例如检查游戏是否已经完成,例如,

function moveBall() {
    if (window.gameFinished) {
        return;
    }

    setTimeout(moveBall, window.score > 1000 : 5 ? 10);
    // the rest of your moveBall function
}

另外,使用存储在窗口对象上的大量全局变量可能会变得非常难以维护,因此可能需要查看JavaScript命名空间。