Im working on a game where you have to avoid Asteroids with a Spaceship (Sprite). Unfortunatly my collision method does not work. I can run the Code on my phone but no "Collision" gets printed out. I think somehow i messed up some Coordinate but i cant find the mistake. Any ideas?
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");
}
}
}
}
Main Class:
[...]
@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());
}
You need to use overlap not contains .
asteroids.get(i).getBounds().overlaps(s.getBounds())
this means contain. Its not collision check it checks whether or not circle in an other circle completely.
this is what you want.You can check collision with overlap method.