2016-08-19 25 views
0

宇宙船(スプライト)を持つ小惑星を避けなければならないゲームに取り組んでいます。残念ながら、私の衝突方法は機能しません。電話でコードを実行できますが、「衝突」は表示されません。どういうわけか私はコーディネートを混乱させたと思うが、間違いを見つけることはできない。何か案は?スプライトとシェイプレンダラーサークルの衝突

public class CollisionManager{ 

private List<Asteroid> asteroids = new ArrayList<Asteroid>(); 
private Spaceship s = new Spaceship(); 

public void checkCollisions(){ 
    for(int i = 0; i < asteroids.size(); i++) 
    { 
     if(asteroids.get(i).getBounds().contains(s.getBounds()) )       
     { 
     System.out.println("COLLISION"); 
     } 
    } 
} 

}

主なクラス:

[...] 
    @Override 
    public void render() { 

    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    if(ScreenManager.getCurrentScreen() != null){ 
     ScreenManager.getCurrentScreen().update(); 
     ScreenManager.getCurrentScreen().update(renderer); 
     ScreenManager.getCurrentScreen().update(cam); 
     ScreenManager.getCurrentScreen().checkCollisions(); 

    } 

    if(ScreenManager.getCurrentScreen() != null){ 
     ScreenManager.getCurrentScreen().render(batch); 
     ScreenManager.getCurrentScreen().render(renderer); 
    } 
} 

小惑星:

[...] 

public void update(float deltaT) { 

    p.x += v.x * deltaT; 
    p.y += v.y * deltaT; 

} 
    public Circle getBounds() 
{ 
    return new Circle(p.x, p.y, radius); 
} 

宇宙船:

[...] 
public void update() { 

    System.out.println("update"); 

     if (Gdx.input.isTouched()) { 
     y = (height - Gdx.input.getY()) /height * MyGdxGame.HEIGHT; 
     x = Gdx.input.getX()/width * MyGdxGame.WIDTH; 
     sprite.setPosition(-sprite.getWidth()/2 + x, sprite.getHeight()/2 
     + y); 


    } 

public Circle getBounds() 
{ 
    return new Circle(sprite.getX(), sprite.getY(), sprite.getWidth()); 
} 
+0

デバッガを使用して、衝突計算に関連する変数の値を表示することをお勧めします。あるいは、LibGDXのロギング機能を使用してこれらの値を出力し、logcatでそれらを表示することもできます。 –

+0

それは本当に醜いくぼみです、私は認めなければなりません。 –

答えて

0

オーバーラップを使用する必要はありません。

asteroids.get(i).getBounds().overlaps(s.getBounds()) 

enter image description here

これが含まれていることを意味します。衝突チェックでは、他のサークル内の円が完全にチェックされているかどうかをチェックします。


enter image description here

これはあなたwant.Youがオーバーラップ法との衝突を確認することができるものです。

0

おそらく良い解決策ではありませんが、オブジェクト間の交差をテストするためにジオメトリライブラリを使用することができます。

関連する問題