2016-10-12 21 views
-3

私は長方形で単純な衝突を試みています。 2つのオブジェクトが衝突すると、ゲームがリセットされます。このコードでは、オブジェクトが左の角度を持つ別のオブジェクトに当たった場合、私のゲームはリセットされます。私はif-elseステートメントを実行しようとしていますが、なぜ私は望みの結果を得ていないのか分かりません。ここで、あなたが本当に何をしているか知らないLibGdxの四角形の衝突

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(position)とは何ですか?このポジション変数とは何ですか?また、このメソッドは何を返しますか? Constants.HUMANPLAYER_RADIUSとは何ですか?それはintですか?それはベクターですか?それは別のものですか?だから、あなたが私たちに、ある魔法の方法が魔法の価値よりも低い場合、あなたのコードは機能しないのかどうかを尋ねています。 – IronMonkey

答えて

0

バウンディングボックスの衝突の例である:ここで

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 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; 
} 
関連する問題