Wiederhole die Textur in libgdx

12

Wie fülle ich die Region mit wiederholter Textur? Jetzt verwende ich die nächste Methode:

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

Es ist sehr offensichtlich. Vielleicht gibt es eine eingebaute Methode?

elf
quelle

Antworten:

3

Sie können "SetWrap" für Ihre Textur verwenden und eine TextureRegion basierend auf dieser Textur erstellen. So erstellen Sie ein gespiegeltes 3x3-Bild (oder eine Axb-Größe)

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

Wichtig: Es hat eine Weile gedauert, bis ich es herausgefunden habe, aber um gespiegelt zu werden, muss Ihre Textur eine Potenz von zwei Größen sein. Es funktionierte auf Android, aber nicht auf iOS, und Sie erhalten keine Nachricht - es wurde schwarz angezeigt. Also muss es 4x4 oder 8x8, 16x16 sein .. 256x256 oder 512x512 ..

Wird dir folgendes geben: Bildbeschreibung hier eingeben

Unten sehen Sie den Beispielcode, der dieses Bild mithilfe eines Bühnen- und Image-Darstellers (Scene2D) generiert hat.

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
quelle