2012-12-01 7 views
5

Ich benutze LibGDX für ein Projekt, und ich versuche, eine Textur über einen bestimmten Platz zu kleistern/zu wiederholen. Im Moment benutze ich einen TextureRegion-Satz, der auf die richtige Größe eingestellt ist, und zusätzlicher Platz in der Textur wird gefüllt, wie es in OpenGL mit "Clamp To Edge" erwartet wird. Ich dachte mir, dass es eine einfache Möglichkeit geben würde, dieses Verhalten in den "Repeat" -Modus zu ändern, aber ich finde keinen Weg, diese Arbeit zu machen, obwohl es so aussieht, als ob etwas ziemlich einfach zu ändern wäre.LibGDX wiederhole TextureRegion

Also gibt es im Grunde genommen eine einfache Möglichkeit, ein Bild in einem festgelegten Bereich mit LibGDX zu wiederholen, ohne es manuell erstellen zu müssen, indem man die Textur selbst in einer Art Schleife wiederholt?

Antwort

1

Ich habe das selbst nicht versucht, aber ich habe diesen Beitrag auf Google gefunden, wenn ich versuche, ein anderes Problem zu beheben. In der LIBGDX API fand ich diese Methode, vielleicht könnte es helfen?

http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/graphics/Texture.html#setWrap(com.badlogic.gdx.graphics.Texture.TextureWrap, com.badlogic.gdx.graphics.Texture.TextureWrap)

Dies gilt jedoch nicht für eine Textur Region ist, sondern die Textur selbst ...

+0

fand ich, dass vor gefragt, aber ich war Mühe, die Dinge, die mit „Textur“ arbeiten als zu „TextureRegion“ angelagert. Fürs Erste habe ich dieses Problem gelöst, indem ich die Klassen von LibGDX leicht modifiziert habe, was sicherlich nicht ideal ist, aber es macht den Trick. – Shamrock

+0

@Shamrock kannst du hier posten, wie du es gemacht hast? Was hast du geändert? – Mars

6

Wenn Sie eine TextureRegion verwenden

TiledDrawable tile = new TiledDrawable(textureRegion); 
tile.draw(spriteBatcher, x, y, width, height); 
+0

Das funktioniert super: P – martindilling

+0

Funktioniert perfekt, plus kann mit Textur Atlas & Sprites verwendet werden. –

+1

Funktioniert nur in Pixel und nicht in Weltkoordinaten. Die API wäre besser, wenn sich die Breite und Höhe in den Weltkoordinaten befinden, in denen sich der Stapel über SetProjectionMatrix befindet – RichieHH

3

Sie können „SetWrap“ auf Ihre Textur verwenden und erstellen Sie eine TextureRegion auf der Grundlage dieser Struktur: Sie können ein TiledDrawable wie so verwenden. Wichtig: Es hat eine Weile gedauert, bis ich es herausgefunden habe, aber um gespiegelt zu werden, muss deine Textur eine zweifache Größe haben. Es funktionierte auf Android, aber nicht auf iOS und Sie erhalten keine Nachricht - es wurde als schwarz angezeigt. So muss es 4x4 oder 8x8, 16x16 sein .. 256x256 oder 512x512 .. ein 3x3 Erstellen gespiegelt Bild (oder 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); 

Sie geben dies: enter image description here

Unten sehen Sie können der Beispielcode, der das Bild mit einer Bühne und Bild Schauspieler erzeugt (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(); 
    } 
}