【问题标题】:Box2D Body with Texture?带有纹理的 Box2D 身体?
【发布时间】:2013-11-24 19:45:16
【问题描述】:

我知道如何将精灵应用到 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 文件

【问题讨论】:

    标签: java libgdx box2d


    【解决方案1】:

    是的,这在 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);
    

    【讨论】:

    • 但是如何将我的 box2d 地面多边形转换为顶点和三角形?
    • 你能解释一下mTmp和EAR_CLIPPING_TRIANGULATOR吗?
    • @RohitMalish 根据文档“耳朵切割算法的简单实现,用于对没有孔的简单多边形进行三角剖分”。它是一个实用程序类,试图从顶点计算三角形的最小数量。 mtmp 是一个vector2,我们将它传递给box2d。它将向该变量添加顶点信息。如果您有用户 PIXELS_PER_METER(相机和世界映射的任何常量),则乘法会处理此问题。
    • 我试过了,但它没有画出任何东西。我用我尝试过的最新代码更新了我的问题,你能看看它并告诉我它有什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多