繁体   English   中英

Sprite和Shape Renderer圆之间的碰撞

[英]Collision between Sprite and Shape Renderer Circles

我在一个游戏中工作,必须避免使用带有飞船的小行星(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());
}

也许不是一个好的解决方案,但是您可以使用几何库来测试对象之间的交集。

您需要使用不包含的重叠。

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

在此处输入图片说明

这意味着包含。 它不进行碰撞检查,它检查是否完全在另一个圆圈中圈出。


在此处输入图片说明

这就是您想要的。您可以使用重叠方法检查碰撞。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM