LibGdx中的矩形碰撞

时间:2016-10-12 14:27:41

标签: java if-statement libgdx

我试图与矩形进行简单的碰撞。当两个物体发生碰撞时,游戏会重置。使用此代码,如果某个对象被另一个具有左角的对象击中,我的游戏将重置。我试图做if-else陈述,但我不确定为什么我没有得到理想的结果。

 public boolean hitByObstacles(ObstaclesCars obstaclesCars) {
      boolean isHit = false;

      for (Car car : obstaclesCars.ObstaclesCarsList) {
           if (car.position.dst(position) < Constants.HUMANPLAYER_RADIUS) {
                isHit = true;
           }
      }

      return isHit;
 }

这是我整个Car类:

public class Car {
public static final String TAG = Car.class.getName();

Vector2 position;
Vector2 velocity;  

public Car (Vector2 position){
    this.position = position;
    this.velocity = new Vector2();
}

public void update (float delta) {

    velocity.lerp(Constants.CAR_ACCELERATION,delta);

    position.mulAdd(velocity, delta);
}

public void render (ShapeRenderer renderer){
    renderer.setColor(Constants.CAR_COLOR);
    renderer.set(ShapeRenderer.ShapeType.Filled);

    renderer.rect(position.x,position.y,Constants.CAR_WIDTH, Constants.CAR_HEIGHT);

}

HUMANPLAYER_RADIUS

public static final float HUMANPLAYER_RADIUS = 0.5f;

1 个答案:

答案 0 :(得分:0)

在不知道你在做什么的情况下,这是一个边界框碰撞的例子:

在要检查碰撞的对象上,您应该有一个Rectangle对象,该对象将成为该对象的边界框。

所以Player类看起来像这样:

public class Player{

    public Rectangle bound;

    public Player(float width, float height, float posX, float posY){
        bound = new Rectangle(width, height, posX, posY);
    }
}

对于你的Car类来说完全一样。

然后检查碰撞:

public boolean checkForCollision(Car car, Player player){    
    if(car.bound.overlaps(player.bound))return true;

    return false;
}