Répéter la texture dans libgdx

12

Comment remplir une région avec une texture répétée? Maintenant, j'utilise la méthode suivante:

spriteBatch.begin();

final int tWidth = texture.getWidth();
final int tHeight = texture.getHeight();

for (int i = 0; i < regionWidth / tWidth; i++) {
    for (int k = 0; k < regionHeight / tHeight; k++) {
        spriteBatch.draw(texture, i*tWidth, k);
    }
}

spriteBatch.end();

C'est très évident. Peut-être y a-t-il une méthode intégrée?

Onze
la source

Réponses:

12

Vous souhaitez définir le TextureWrapparamètre de texture sur Repeat. Consultez la documentation pour plus d'informations et la méthode de texture .

Plus précisément:

setWrap(Repeat, Repeat);
MichaelHouse
la source
3

Vous pouvez utiliser "SetWrap" sur votre texture et créer une TextureRegion basée sur cette texture. Pour créer une image miroir 3x3 (ou taille axb)

Texture imgTexture = new Texture(Gdx.files.internal("badlogic.jpg"));
imgTexture.setWrap(Texture.TextureWrap.MirroredRepeat, Texture.TextureWrap.MirroredRepeat);
TextureRegion imgTextureRegion = new TextureRegion(imgTexture);
imgTextureRegion.setRegion(0,0,imgTexture.getWidth()*3,imgTexture.getHeight()*3);

Important: il m'a fallu un certain temps pour le comprendre, mais pour être reflété, votre texture doit être une puissance de deux tailles. Cela fonctionnait sur Android mais pas sur iOS et vous ne recevez pas de message - il était affiché en noir. Il doit donc s'agir de 4x4 ou 8x8, 16x16 .. 256x256 ou 512x512 ..

Vous donnera ceci: entrez la description de l'image ici

Ci-dessous, vous pouvez voir l'exemple de code qui a généré cette image à l'aide d'un acteur de scène et d'image (Scene2D)

public class GameScreen implements Screen {

    MyGdxGame game;
    private Stage stage;

    public GameScreen(MyGdxGame aGame){
        stage = new Stage(new ScreenViewport());
        game = aGame;
        Texture imgTexture = new Texture(Gdx.files.internal("badlogic.jpg"));
        imgTexture.setWrap(Texture.TextureWrap.MirroredRepeat, Texture.TextureWrap.MirroredRepeat);
        TextureRegion imgTextureRegion = new TextureRegion(imgTexture);
        imgTextureRegion.setRegion(0,0,imgTexture.getWidth()*3,imgTexture.getHeight()*3);

        TextureRegionDrawable imgTextureRegionDrawable = new TextureRegionDrawable(imgTextureRegion);
        Image img = new Image();
        img.setDrawable(imgTextureRegionDrawable);
        img.setSize(imgTexture.getWidth()*3,imgTexture.getHeight()*3);
        stage.addActor(img);
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.act(delta);
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {
        stage.getViewport().update(width, height, true);
    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {
        stage.dispose();
    }
}
Julien
la source