我知道如何将精灵应用到Box2d体,但有没有办法将纹理应用到它?基本上我要做的是有一个纹理,比方说32x32,然后只是在身体上重复它,就像这张图片中的地面一样:
这在LibGDX中是否可行?
编辑:
我的最新尝试:
Fixture fixture = body.createFixture(fixtureDef);
Vector2 mTmp = new Vector2();
PolygonShape shape = (PolygonShape) fixture.getShape();
int vertexCount = shape.getVertexCount();
float[] vertices = new float[vertexCount * 2];
for (int k = 0; k < vertexCount; k++) {
shape.getVertex(k, mTmp);
mTmp.rotate(body.getAngle()* MathUtils.radiansToDegrees);
mTmp.add(body.getPosition());
vertices[k * 2] = mTmp.x * PIXELS_PER_METER;
vertices[k * 2 + 1] = mTmp.y * PIXELS_PER_METER;
}
short triangles[] = new EarClippingTriangulator().computeTriangles(vertices).toArray();
Texture texture = new Texture(Gdx.files.internal("data/block.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
TextureRegion textureRegion = new TextureRegion(texture, 0, 0, texture.getWidth(), texture.getHeight());
PolygonRegion region = new PolygonRegion(textureRegion, vertices, triangles);
poly = new PolygonSprite(region);
并在渲染中:
polyBatch.begin();
poly.draw(polyBatch);
polyBatch.end();
但它没有画任何东西。
导入不同形状的水平后,我得到了这个结果:
只有一个多边形(显示在红色圆圈内)才能获得纹理。整个级别作为JSON文件导入
答案 0 :(得分:3)
是这在libgdx中非常有用。
您只需要为该
创建一个多边形区域PolygonRegion region = new PolygonRegion(textureRegion, vertices, triangles);
此处textureRegion是您要重复的区域。 顶点和三角形定义了区域的形状。
此多边形区域是重复纹理,从顶点和三角形形成红色。您可以使用多边形批处理渲染此区域,就像使用精灵批处理一样。
<强>更新强>
PolygonShape shape = (PolygonShape) fixture.getShape();
int vertexCount = shape.getVertexCount();
float[] vertices = new float[vertexCount * 2];
for (int k = 0; k < vertexCount; k++) {
shape.getVertex(k, mTmp);
mTmp.rotate(body.getAngle()* MathUtils.radiansToDegrees);
mTmp.add(bodyPos);
vertices[k * 2] = mTmp.x * PIXELS_PER_METER;
vertices[k * 2 + 1] = mTmp.y * PIXELS_PER_METER;
}
short triangles[] = new EarClippingTriangulator()
.computeTriangles(vertices)
.toArray();
PolygonRegion region = new PolygonRegion(
textureRegion, vertices, triangles);