我正在尝试使用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
接口,可以告诉您两个身体碰撞时。