我正在创建一个类似于 Dance Dance Revolution 的游戏,其中彩色箭头在屏幕上向下移动并进入灰色箭头轮廓区域,类似于此 GIF
我的程序的核心功能存储在一个 onEvent 中,它会在按下“keydown”时做出响应。onEvent 检查是否按下了正确的箭头,以及按下的箭头是否与移动彩色箭头的生成方向一致。(剧透中的代码)
onEvent("playScreen", "keydown", function(event) {
if (getYPosition(shownArrow) == getYPosition("arrowsUpG")) {
if (shownArrow === arrowList[0] && event.key == "Left" && getYPosition(shownArrow) === getYPosition("arrowsLeftG")) {
speed(100);
displayArrows();
} else {
if (shownArrow === arrowList[1] && event.key == "Right" && getYPosition(shownArrow) === getYPosition("arrowsRightG")) {
speed(100);
displayArrows();
} else {
if (shownArrow === arrowList[2] && event.key == "Down" && getYPosition(shownArrow) === getYPosition("arrowsDownG")) {
speed(100);
displayArrows();
} else {
if (shownArrow === arrowList[3] && event.key == "Up" && getYPosition(shownArrow) === getYPosition("arrowsUpG")) {
speed(100);
displayArrows();
} else {
healthDanger();
}
}
}
}
}
});
- shownArrow - 向下移动屏幕的彩色箭头(一次生成 1 个)。
- displayArrows - 更新游戏得分,隐藏显示箭头,然后生成并显示一个新的(在相同的变量名下)。然后这个新箭头重新定位在屏幕顶部,以便游戏可以进行
- healthDanger - 如果不满足条件,则降低生命值。
我试图在检查位置的 onEvent 之后添加一个 if 语句,但它没有按预期工作。
游戏可以进行,但是,如果在到达空箭头轮廓之前按下正确的箭头,那么分数仍然会增加。我尝试将 onEvent 变成一个函数,所以它只能被调用一次,当箭头完成向下移动屏幕(直到它到达轮廓位置),但是,按键仍然被注册并添加到分数中,所以我删除了它。
这是使箭头在屏幕上向下移动的函数:
function movingArrows() {
speed(99.999999999999);
while (getYPosition(shownArrow) !== getYPosition("arrowsUpG")) {
setPosition(shownArrow, getXPosition(shownArrow), getYPosition(shownArrow) + 1);
console.log(getYPosition(shownArrow));
}
//healthDanger();
}
- arrowsUpG-是整个右、左、上、下箭头轮廓的Y位置(它们都是相同的Y位置)
- speed 99.99999 - 用于使箭头能够在屏幕上向下滑动,我稍后会清理它。(箭头一直在屏幕上向下移动,直到它们到达轮廓。一旦它们这样做了,就可以注册 onEvent,因为 Java从while循环中释放出来)
- 忽略healthDanger,这是一个WIP函数,会减少一个健康变量
问题 我怎样才能做到这一点,以便可以在特定时间调用 onEvent,如果这可能的话?我不希望在下降的箭头到达轮廓之前激活 onEvent,因为这会在不应该的情况下增加分数。
此外,对于任何不正确的 Java 实现,我深表歉意。我正在学习 Java 入门课程,该课程使用一个名为 code.org 的网站,而且我对编码非常陌生,这也是我的最后一个项目。
在此先感谢,任何帮助将不胜感激。