宇宙船(スプライト)を持つ小惑星を避けなければならないゲームに取り組んでいます。残念ながら、私の衝突方法は機能しません。電話でコードを実行できますが、「衝突」は表示されません。どういうわけか私はコーディネートを混乱させたと思うが、間違いを見つけることはできない。何か案は?スプライトとシェイプレンダラーサークルの衝突
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());
}
デバッガを使用して、衝突計算に関連する変数の値を表示することをお勧めします。あるいは、LibGDXのロギング機能を使用してこれらの値を出力し、logcatでそれらを表示することもできます。 –
それは本当に醜いくぼみです、私は認めなければなりません。 –