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 命名空间。
我正在寻求一些帮助,以在 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 命名空间。