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

libgdx - Simple repeating texture (setWrap())

所以我得到了一个非常简单的尖峰纹理,我想在屏幕底部重复多次,这样它就会始终填满整个屏幕,无论宽度如何。 当然,我现在已经了解了 setWrap() 函数,但我无法获得我正在寻找的结果。

This is the texture

And I'd like to get something like this

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

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

Texture spikesTex;

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

然后我已经为

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

但其中 none 确实成功了。

我尝试通过这种方式来完成您的要求。也许它会对你有所帮助。

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();
    }
}

不需要创建额外的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);