libGDX纹理一个二维地形

时间:2014-05-03 14:03:43

标签: libgdx textures box2d terrain

我在libgdx和box2d的卡车游戏中工作。 在我的游戏1米= 100像素。 我的二维地形是由我生成的,由点组成。

enter image description here

我做了什么,为整个多边形做了一个polygonregion并使用了texturewrap.repeat。 问题是,我的游戏大小缩小了100倍,以适应box2d单位。

所以我的相机宽度是800/100,高度是480 / 100.(8x4.8像素)

我如何创建多边形区域

box = new Texture(Gdx.files.internal("box.png"));
    box.setFilter(TextureFilter.Linear, TextureFilter.Linear);
    box.setWrap(TextureWrap.Repeat, TextureWrap.Repeat);

    TextureRegion region = new TextureRegion(box);

    psb = new PolygonSpriteBatch();

    float[] vertices = new float[paul.size];
    for (int i = 0; i < paul.size; i++) {
        vertices[i] = paul.get(i);
        if (i % 2 == 1)
            vertices[i] += 1f;

    }

    EarClippingTriangulator a = new EarClippingTriangulator();
    ShortArray sar = a.computeTriangles(vertices);
    short[] shortarray = new short[sar.size];
    for (int i = 0; i < sar.size; i++)
        shortarray[i] = sar.get(i);
    PolygonRegion pr = new PolygonRegion(region, vertices, shortarray);

    System.out.println(vertices.length + " " + shortarray.length);

    ps = new PolygonSprite(pr);

现在我只是将polygonsprite绘制到我的polygonsprite批处理中。 这将重复渲染多边形上的纹理,但图片将大100倍并且非常拉伸。 左边的例子是我要制作的那个,右边的例子是我的游戏看起来的样式..

enter image description here

3 个答案:

答案 0 :(得分:2)

此公关合并,看起来像你想做的: https://github.com/libgdx/libgdx/pull/3799

请参阅RepeatablePolygonSprite。

答案 1 :(得分:1)

我不完全确定这是否能解决您的问题(现在无法对其进行测试),但您需要将TextureRegion的纹理坐标设置为更高的值,可能是您的因素100.

因此,您可以尝试使用region.setU2(100)region.setV2(100)。由于纹理坐标通常来自[0,1],因此高于该值的值将在外部。而且因为你将TextureWrap设置为重复,这将反复重复你的纹理。

这样,TextureRegion将显示您的一个纹理在x和y方向上重复100次。如果您告诉PolygonSprite使用该区域,则应将其显示为您发布的图片。

希望有帮助......:)

答案 2 :(得分:1)

您可以按代码创建新纹理。取你的水平尺寸并用你的纹理填充它然后删除到顶部的背景。看看pixelmap。也许这会对你有帮助。

编辑:

TextureRegion不会重复以适合您使用纹理的大小,或者您使用TiledDrawable。