2016-10-12 170 views
-3

我正在尝试与矩形做一个简单的碰撞。当两个物体相撞时,游戏重置。使用此代码,如果某个对象被另一个具有左角的对象命中,则我的游戏将重置。我试图做如果 - 其他语句,但我不知道为什么我没有得到预期的结果。LibGdx中的矩形碰撞

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

这里是我的整个车类:

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

你没有说什么地方出了错,或者提供足够的信息来诊断任何问题。但我确实看到代码中没有任何矩形。 – Tenfour04

+0

我们没有机会知道你在这里做什么。什么是car.position.dst(位置)?这个位置变量是什么,该方法返回什么?什么是Constants.HUMANPLAYER_RADIUS?它是一个int吗?它是矢量吗?还有别的吗?所以你问我们为什么如果一个神奇的方法不是一个神奇的价值,你的代码不起作用。 – IronMonkey

回答

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

完全一样为您的汽车类。

然后你检查碰撞:

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

    return false; 
}