-3

我一直在做一个非常简单的 2D 游戏,它非常基础,它有一个 Play 类,里面有 init、render 和 update 等方法,我制作了一个 2D 地图和一个玩家,当有键盘输入,只需使用 If 语句即可完成。游戏有一个口袋妖怪视图(俯视图),您可以上下左右移动。在我的地图上有一个障碍物,在我玩游戏的那一刻,玩家只是穿过障碍物,我希望玩家在遇到障碍物时停下来无法穿过它,所以我研究了碰撞检测并管理首先,在我的代码中,我制作了 2 个矩形:

Rectangle rectOne = new Rectangle(buckyPositionX, buckyPositionY, 40, 40);
Rectangle rectTwo = new Rectangle(-100, -143, 70,70);

并且还为变量 x 创建了一个布尔值,如果两个矩形相交,则返回 true:

boolean x = rectOne.intersects(rectTwo);

这样做之后,我现在对如何对 java 说的话感到困惑,如果 boolean 返回 true 阻止玩家通过那个矩形,我知道这是一个 if 语句搜索如果 x 返回 true 但我不知道在里面放什么我希望一些更有经验的用户可以帮助解决这个问题。

4

1 回答 1

1

我的建议是编写一个方法changeBuckyPos来检查冲突和更新buckyPositionX以及buckyPositionY是否没有冲突。

public void changeBuckyPos(float deltaX, float deltaY) {
  float newX = buckyPositionX + deltaX;
  float newY = buckyPositionY + deltaY;

  // check for collisions
  Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40);
  Rectangle rectTwo = new Rectangle(-100, -143, 70,70);

  if (!rectOne.intersects(rectTwo)) {
    buckyPositionX = newX;        
    buckyPositionY = newY;        
  }
}

这也可以用于当前代码中的所有关键事件处理程序,以使其更清晰,如下所示:

public void changeBuckyPos(float deltaX, float deltaY) {
  float newX = buckyPositionX + deltaX;
  float newY = buckyPositionY + deltaY;

  // check for collisions
  Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40);
  Rectangle rectTwo = new Rectangle(-100, -143, 70,70);

  if (!rectOne.intersects(rectTwo)) {
    // check global limits
    if ((newX > -1000) && (newX < 1000) && (newY > -1000) && (newY < 1000)) {
      buckyPositionX = newX;
      buckyPositionY = newY;
    }
  }
}
于 2012-12-15T13:26:55.620 回答