Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在LibGDX中处理与shaperender的冲突_Java_Android_Libgdx_Collision_Shape Rendering - Fatal编程技术网

Java 如何在LibGDX中处理与shaperender的冲突

Java 如何在LibGDX中处理与shaperender的冲突,java,android,libgdx,collision,shape-rendering,Java,Android,Libgdx,Collision,Shape Rendering,我正在尝试用LibGDX为安卓系统制作一个小游戏,我在碰撞检测方面遇到了困难。 所以,我有两种形状: 第一个是矩形(播放器): 第二个是下面的笼子: shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); shapeRenderer.setColor(Color.BLACK); shapeRenderer.rect(0, 0, 50, Gdx.graphics.getHeight()); shapeRenderer.rect(0, 0, Gdx.

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

第二个是下面的笼子:

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方法,但我希望生成比矩形更复杂的形状


谢谢你的帮助

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

渲染点、线、矩形、填充矩形和长方体。这 类不用于性能敏感的应用程序 但更倾向于调试

更好的方法可能是分配一个带有小白色纹理的
精灵
,将其放大到合适的大小。使用方法设置色调和alpha

对于精灵的碰撞
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。在box2dapi内部有一个
ContactListener
接口,当两个物体碰撞时,它会告诉您

你所说的更复杂的形状只是由多个较小的矩形组成。你只想要那些,甚至像三角形和其他多边形的东西吗?不,我想我只想用小矩形来制作更大的形状。然后我应该从矩形类为我想要的每个小矩形创建一个矩形吗?好的,我离开ShaperEnder哈哈!非常感谢你的帮助我要试试你告诉我的!
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;
}