0
我正在一個遊戲中,你必須避免與Spaceship(雪碧)小行星。不幸的是我的碰撞方法不起作用。我可以在手機上運行代碼,但不會打印出「碰撞」。我想我搞砸了一些座標,但我找不到這個錯誤。有任何想法嗎?Sprite和形狀渲染器圈之間的碰撞
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查看它們。 –
這是非常醜陋的縮進,我必須承認。 –