我创造了一个类似于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();
}
}
}
}
}
});
我试图在检查位置的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();
}
问题 我怎样才能这样做,以便在特定时间调用onEvent,如果可能的话?我不希望onEvent在下降的箭头到达轮廓之前激活,因为这会在不应该的时候增加分数。
我也为任何不正确的Java实现道歉。我正在Java中使用一个名为code.org的站点的介绍类,我对编码很新,这也是我的最终项目。
在此先感谢,非常感谢任何帮助。
答案 0 :(得分:1)
我认为你的问题是你正在检查确切的像素。您不认为您的游戏在各种FPS上运行,并且您的箭头可能会跳过一两帧。我会添加一些范围,如果按键,它将被视为正确(将其视为一个命中箱)。允许它在范围边缘+箭头大小的一半是可以的。
所以它会是这样的:
onEvent("playScreen", "keydown", function(event) {
if (getYPosition(shownArrow) == getYPosition("arrowsUpG")) {
if (shownArrow === arrowList[0] && event.key == "Left" && getYPosition(shownArrow) >= playScreen.height - shownArrow.height/2 && getYPosition(shownArrow) <= playScreen.height ) {
// you clicked at right time, do something
}
}
});
编辑:如果您的箭头从顶部移动到底部,则编码。如果你的箭头从底部到顶部,那就像是:
onEvent("playScreen", "keydown", function(event) {
if (getYPosition(shownArrow) == getYPosition("arrowsUpG")) {
if (shownArrow === arrowList[0] && event.key == "Left" && getYPosition(shownArrow) >= 0 && getYPosition(shownArrow) <= 0 + shownArrow.height) {
// you clicked at right time, do something
}
}
});