Ich arbeite an einem Spiel, wo Sie Asteroiden mit einem Raumschiff (Sprite) vermeiden müssen. Leider funktioniert meine Kollisions-Methode nicht. Ich kann den Code auf meinem Telefon laufen lassen, aber es wird kein "Kollision" ausgedruckt. Ich denke, irgendwie habe ich eine Koordinate vermasselt, aber ich kann den Fehler nicht finden. Irgendwelche Ideen?Kollision zwischen Sprite und Shape Renderer Circles
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");
}
}
}
}
Hauptklasse:
[...]
@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);
}
}
Asteroid:
[...]
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);
}
Spaceship:
[...]
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());
}
Ich empfehle Ihnen, einen Debugger zu verwenden, um die Werte der Variablen anzuzeigen, die an der Kollisionsberechnung beteiligt sind. Alternativ können Sie die Protokollierungsfunktionen von LibGDX verwenden, um diese Werte auszugeben und sie mit logcat anzuzeigen. –
Das ist wirklich hässlicher Einzug, ich muss zugeben. –