libgdx - 简单的重复纹理(setWrap())

时间:2017-03-08 22:44:17

标签: java libgdx mapping textures repeat

所以我得到了一个非常简单的尖峰纹理,我想在屏幕底部重复多次,所以无论宽度如何,它总是填满整个屏幕尺寸。 当然我现在已经知道了setWrap() - 函数,但我无法得到我正在寻找的结果。

This is the texture

And I'd like to get something like this

更具体地说,我有给定屏幕的宽度,并计算显示的纹理高度,以屏幕高度的百分比表示。 现在我想将纹理放在0,0并重复它直到它到达屏幕的右侧(当然它可能被屏幕切掉一点但是这不是问题我只是不希望纹理被拉伸)

我已经"到目前为止得到了这个代码

Texture spikesTex;

spikesTex = new Texture("spike.png");
spikesTex.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);

然后我已经为

尝试了不同的参数
batch.draw(spikesTex, ...);

但他们都没有真正解决。

2 个答案:

答案 0 :(得分:0)

我试着用这种方式来完成你的要求。可能它会帮助你。

public class MAIN extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    TextureRegion textureRegion;
    float drawingWidth,drawingHeight;

    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("spike.png");

        img.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.ClampToEdge);
        int width=Gdx.graphics.getWidth();

        textureRegion=new TextureRegion(img,0,0,width,img.getHeight());

        drawingWidth=width;
        drawingHeight=Gdx.graphics.getHeight()*.2f; 
   }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(textureRegion,0,0,drawingWidth,drawingHeight);
        batch.end();
    }

    @Override
    public void dispose () {
        batch.dispose();
        img.dispose();
    }
}

答案 1 :(得分:0)

没有必要创建额外的TextureRegion,你可以自己绘制重​​复的纹理,给出所需的宽度和高度参数:

    img = new Texture("spike.png");
    img.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
    ...
    int imgPosX = 0;// x position where to draw
    int imgPosY = 0;// y position where to draw 
    batch.draw(img, imgPosX, imgPosY, 0, 0, drawingWidth, drawingHeight);