Java 2D游戏矩形碰撞响应

时间:2012-12-15 12:52:15

标签: java if-statement collision-detection

我一直在研究一个非常简单的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但我不知道放什么在其内部,我希望一些更有经验的用户可以帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

我的建议是编写一个方法changeBuckyPos,检查碰撞并更新buckyPositionXbuckyPositionY,如果没有碰撞。

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;
    }
  }
}