Javascript 闯关游戏。在得分间隔改变球速

Javascript Breakout game. Changing ball speed at score interval

我正在寻求一些帮助,以在 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 语句的全局函数和新函数是否适用于此。

您当前正在使用 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
}

顺便说一句,使用存储在 window 对象上的大量全局变量可能会变得非常难以维护,因此可能值得研究一下 JavaScript 命名空间。