2016-10-12 213 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; 
}