LibGDX 如何处理与 ShapeRenderer 的碰撞
How to handle collision with ShapeRenderer in LibGDX
我正在尝试用 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();
我的问题是:
如何检测这两个对象之间的碰撞?我知道如何检测碰撞的唯一方法是使用矩形 class 中的相交方法,但我想制作比矩形更复杂的形状。
感谢您的帮助!
根据文档 ShapeRenderer
效率不高,不应大量使用。
Renders points, lines, rectangles, filled rectangles and boxes. This
class is not meant to be used for performance sensitive applications
but more oriented towards debugging.
更好的方法可能是分配一个 Sprite
带有小的白色纹理,您可以将其放大到适当的大小。使用 setColor(..) 方法设置色调和 alpha。
对于 Sprite return 边界轴对齐矩形的碰撞 getBoundingRectangle()
,这将有助于碰撞。
您可以使用像素图手动创建纹理。
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, that will return vertex point of your shape in readable file format, use that points and create Polygon。
Libgdx 有 Intersector
class,包含许多用于碰撞检测的静态方法,如 intersectPolygons(....)
等等。
另一方面,如果您想要逼真的碰撞检测,您可以在游戏中使用 box2d。在 box2d API 里面有一个 ContactListener
界面,当两个物体碰撞时会告诉你。
我正在尝试用 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();
我的问题是:
如何检测这两个对象之间的碰撞?我知道如何检测碰撞的唯一方法是使用矩形 class 中的相交方法,但我想制作比矩形更复杂的形状。
感谢您的帮助!
根据文档 ShapeRenderer
效率不高,不应大量使用。
Renders points, lines, rectangles, filled rectangles and boxes. This class is not meant to be used for performance sensitive applications but more oriented towards debugging.
更好的方法可能是分配一个 Sprite
带有小的白色纹理,您可以将其放大到适当的大小。使用 setColor(..) 方法设置色调和 alpha。
对于 Sprite return 边界轴对齐矩形的碰撞 getBoundingRectangle()
,这将有助于碰撞。
您可以使用像素图手动创建纹理。
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, that will return vertex point of your shape in readable file format, use that points and create Polygon。
Libgdx 有 Intersector
class,包含许多用于碰撞检测的静态方法,如 intersectPolygons(....)
等等。
另一方面,如果您想要逼真的碰撞检测,您可以在游戏中使用 box2d。在 box2d API 里面有一个 ContactListener
界面,当两个物体碰撞时会告诉你。