Box2D身体纹理?

时间:2013-11-24 19:45:17

标签: java libgdx box2d

我知道如何将精灵应用到Box2d体,但有没有办法将纹理应用到它?基本上我要做的是有一个纹理,比方说32x32,然后只是在身体上重复它,就像这张图片中的地面一样:

enter image description here

这在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();

但它没有画任何东西。

导入不同形状的水平后,我得到了这个结果:

enter image description here

只有一个多边形(显示在红色圆圈内)才能获得纹理。整个级别作为JSON文件导入

1 个答案:

答案 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);