Java Box2d主体填充了纹理Libgdx

Java Box2d主体填充了纹理Libgdx,java,libgdx,box2d,Java,Libgdx,Box2d,我有一个简单的三角形形状(障碍物)在我的游戏,我想填补它与纹理重复。我已经看了另外两个主题,但找不到有效的解决方案。我如何用一个小图像填充这个三角形(假设它反复被称为“brickTexture.png”? 下面是用于在barrier.java中创建障碍物的box2Body的代码 BodyDef bdef = new BodyDef(); bdef.position.set(obstaclePosition); bdef.type = BodyDef.BodyType.StaticBody; b2

我有一个简单的三角形形状(障碍物)在我的游戏,我想填补它与纹理重复。我已经看了另外两个主题,但找不到有效的解决方案。我如何用一个小图像填充这个三角形(假设它反复被称为“brickTexture.png”? 下面是用于在barrier.java中创建障碍物的box2Body的代码

BodyDef bdef = new BodyDef();
bdef.position.set(obstaclePosition);
bdef.type = BodyDef.BodyType.StaticBody;
b2body = world.createBody(bdef);

FixtureDef fdef = new FixtureDef();
PolygonShape triangle = new PolygonShape();
float vertices1[] ={-50 / PPM, 100 / PPM,
                    50 / PPM, 100 / PPM,
                     0 / PPM,  0 / PPM};
triangle.set(vertices1);

fdef.shape = triangle;
b2body.createFixture(fdef);
这是三角形


这可以通过使用类PolygonRegionPolygonSpriteBatch轻松实现,并适用于任何多边形形状(不仅仅是三角形)

创建多边形区域:

// this will calculate the triangles given your vertices
short triangles[] = new EarClippingTriangulator().computeTriangles(vertices1).toArray();
// use your texture region
PolygonRegion polygonRegion = new PolygonRegion(textureRegion, vertices1, triangles);
然后需要使用PolygonSpriteBatch在所需位置(我假定身体位置)进行渲染:

确保使用Repeatwrap加载纹理,以便纹理可以平铺:

texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);

Class docs:,

谢谢很多朋友!如果不麻烦的话,我还有一个小问题,如何在不更改原始文件大小的情况下更改纹理的密度?对不起,我不太明白你对纹理密度的意思。也许你的意思是以不同的大小绘制它?如果是的话,PolygonSpriteBatch有几种不同的绘制方法th args用于满足此类需求,或者您可能希望在绘制时,通过将纹理过滤器设置为linear:texture.setFilter(TextureFilter.linear,TextureFilter.linear)使其看起来不象像素化;很抱歉反应太晚,可能你已经解决了这个问题。实际上我的意思不同,但我现在知道这个三角测量系统是如何工作的,不再重要。再次感谢你的帮助。谢谢
texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);