Java游戏碰撞检测,(侧面碰撞)与矩形

时间:2012-01-14 23:50:20

标签: java collision-detection

我一直在编写游戏引擎,我的演员类有问题。我想确定与矩形(上方)和矩形边的碰撞。我为他们写了两种方法。

public boolean isLeftCollision(Actor actor) {
    boolean bool = false;
    Rectangle LeftBounds = new Rectangle(x, y, x-velocity, image.getHeight(null));
    bool = LeftBounds.intersects(actor.getBounds());
    return bool;
}

public boolean isRightCollision(Actor actor) {
    boolean bool = false;
    Rectangle RightBounds = new Rectangle(x+image.getWidth(null), y, image.getWidth(null)+velocity, image.getHeight(null));
    bool = RightBounds.intersects(actor.getBounds());
    return bool;
}

这里的速度是下一步的动作。

但他们都给我错误(即错判断)。我怎样才能在演员类中解决这个问题。

2 个答案:

答案 0 :(得分:1)

我承认我几乎无法阅读您的代码,如果我的回答没有帮助,我很抱歉。我的猜测是碰撞中的速度会产生误差。根据您检查的频率以及速度保持的值,您可以注册尚未发生的碰撞......

我会分两步完成碰撞检测。

  1. 测试碰撞
  2. 确定它是在上方还是在一侧。
  3. 这里有一些伪代码:

    Rectangle self_shape=this.getBounds();
    Rectangle other_shape=actor.getBounds();
    bool collision = self_shape.intersects(other_shape);
    if(collision){
        //create two new variables self_centerx and self_centery
        //and two new variables other_centerx and other_centery
        //let them point to the coordinates of the center of the
        //corresponding rectangle
    
        bool left=self_centerx - other_centerx<0
        bool up=self_centery - other_centery<0
    }
    

    通过这种方式,您可以查看其他演员相对于您的位置。如果它在上方或一侧。

答案 1 :(得分:1)

请记住,Rectangle的第三个参数是宽度,而不是另一边的x。所以,你真正想要的可能是这样的:

public boolean isLeftCollision(Actor actor) {
   return new Rectangle(x - velocity, y, velocity, image.getHeight(null))
         .intersects(actor.getBounds());
}

public boolean isRightCollision(Actor actor) {
   return new Rectangle(x + image.getWidth(null), y, velocity, image.getHeight(null))
         .intersects(actor.getBounds());
}

(假设速度是向左或向右移动的(正)距离,并且仅调用您正在移动的方向的方法)