0

我正在尝试使用 LibGDX 为 Android 制作一个小游戏,并且在碰撞检测方面遇到了困难。所以,我有两个形状:第一个是矩形(播放器):

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.rect(position.x, position.y, width, height);
shapeRenderer.end();

第二个是以下,一种笼子:

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.rect(0, 0, 50, Gdx.graphics.getHeight());
shapeRenderer.rect(0, 0, Gdx.graphics.getWidth(), 50);
shapeRenderer.rect(Gdx.graphics.getWidth()-50, 0, 50, Gdx.graphics.getHeight());
shapeRenderer.rect(0, Gdx.graphics.getHeight()-50, Gdx.graphics.getWidth(), 50);
shapeRenderer.end();

我的问题是:

如何检测这两个对象之间的碰撞?我知道如何检测碰撞的唯一方法是使用 Rectangle 类中的 intersect 方法,但我想制作比矩形更复杂的形状。

感谢您的帮助 !

4

1 回答 1

0

根据文档ShapeRenderer,效率不高,不应大量使用。

渲染点、线、矩形、填充矩形和框。这个类并不意味着用于性能敏感的应用程序,而是更面向调试。

更好的方法可能是分配一个Sprite小的白色纹理,您可以将其放大到适当的大小。使用setColor(..)方法设置色调和 alpha 。

对于getBoundingRectangle()Sprite 的碰撞返回边界轴对齐的矩形,这将有助于您进行碰撞。

您可以使用像素图手动创建纹理。

public static Texture createBgTexture() {
    Pixmap pixmap = new Pixmap(1, 1, Format.RGBA8888);
    pixmap.setColor(Color.WHITE);
    pixmap.fill();
    Texture texture = new Texture(pixmap); // must be manually disposed
    pixmap.dispose();

    return texture;
}

对于更复杂的形状,请使用Physics Body Editor,它将以可读文件格式返回形状的顶点,使用该点并创建Polygon

Libgdx 具有Intersector类,包含许多用于碰撞检测的静态方法intersectPolygons(....)等等。


另一方面,如果你想要一个逼真的碰撞检测,你可以在你的游戏中使用 box2d。在 box2d API 中,有一个ContactListener接口会告诉你两个身体何时发生碰撞。

于 2017-06-25T05:41:14.943 回答