如何在libgdx中与Shaperender碰撞



我正在尝试使用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();

我的问题是:

如何检测这两个对象之间的碰撞?我知道的唯一方法是,如何检测到矩形类别的相交方法,但我想制造的形状比矩形更复杂。

谢谢您的帮助!

根据文档 ShapeRenderer并非有效,不应强烈使用。

呈现点,线,矩形,填充矩形和盒子。这 课程并不是要用于性能敏感应用 但更倾向于调试。

更好的方法可能是用小的白色纹理分配Sprite,您可以将其提高到适当的尺寸。用setColor(..(方法设置色调和alpha。

对于Sprite返回边界轴的碰撞getBoundingRectangle()轴对准矩形,这将帮助您碰撞。

您可以使用PixMap手动创建纹理。

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;
}

对于更复杂的形状使用物理主编辑器,它将以可读的文件格式返回形状的角度,使用该点并创建多边形。

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


另一方面,如果您想要现实的碰撞检测,则可以在游戏中使用Box2D。在Box2D API中,有一个ContactListener接口,可以告诉您两个身体碰撞时。

最新更新