如何在程序中的特定点调用onEvent?

时间:2018-06-06 03:36:05

标签: javascript html css code.org

我创造了一个类似于Dance Dance Revolution的游戏,其中彩色箭头沿着屏幕向下移动到灰色箭头轮廓区域,类似于此GIF

Example 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位置)
  • 速度99.99999 - 用于使箭头能够在屏幕上滑动,我将在稍后清理它。(箭头一直向下移动直到它们到达轮廓。一旦它们这样做,onEvent就可以了注册 因为Java从while循环中解放出来)
    • 忽略healthDanger,这是一个可以减少健康变量的WIP功能

问题  我怎样才能这样做,以便在特定时间调用onEvent,如果可能的话?我不希望onEvent在下降的箭头到达轮廓之前激活,因为这会在不应该的时候增加分数。

我也为任何不正确的Java实现道歉。我正在Java中使用一个名为code.org的站点的介绍类,我对编码很新,这也是我的最终项目。

在此先感谢,非常感谢任何帮助。

1 个答案:

答案 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
      }
    }
});