2012-12-01 20 views
5

私はプロジェクトにLibGDXを使用していますが、特定の量の領域にテクスチャをタイル/リピートしようとしています。現時点では、適切なサイズに設定されたTextureRegionを使用しており、「Edge to Clamp」を使用してOpenGLで予想されるように、テクスチャの余分なスペースが埋められています。この動作を「リピート」モードに変更する簡単な方法があると思っていましたが、変更するのはかなり簡単なように思えますが、その作業を行う方法を見つけることができないようです。LibGDX repeating TextureRegion

基本的に、LibGDXを使用して設定された領域でイメージを繰り返す簡単な方法はありますか?手作業でそれをループの何らかの形で繰り返して構築する必要はありませんか?

答えて

1

私はこれを自分で試したことはありませんが、別の問題のトラブルシューティングを試みるときにgoogleでこの投稿を見つけました。 LIBGDX APIでは、このメソッドが見つかりました。

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)

これは、テクスチャ自体むしろ、しかしテクスチャ領域のためではありません...

+0

私はその前に尋ねることが分かったが、私は悩み「TextureRegion」に並置として「テクスチャ」での作業の事を得ることを持っていました。今のところ私はLibGDXのクラスを少し変更することでこの問題を回避してきましたが、それは確かに理想的ではありませんが、それはトリックです。 – Shamrock

+0

@Shamrockあなたはここに投稿できますか?あなたは何を変えましたか? – Mars

6

あなたがTextureRegionを使用している場合あなたのテクスチャに「SetWrap」を使用し、そのテクスチャに基づいてTextureRegionを作成することができます

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

これは素晴らしい作品です:P – martindilling

+0

完璧に動作し、テクスチャアトラスとスプライトで使用できます。 –

+1

ワールド座標ではなくピクセル単位でのみ動作します。幅と高さがバッチがSetProjectionMatrix経由のワールド座標にある場合、APIの方が優れています – RichieHH

3

:、あなたはそうのようなTiledDrawableを使用することができます。 重要:それを理解するのはしばらく時間がかかりましたが、鏡映するにはテクスチャは2サイズの力でなければなりません。 Android上では動作していましたが、iOSでは動作していませんでした。メッセージは表示されません。だから、

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

があなたに与えるの3x3を作成する4×4または8×8、16×16 ... 256×256または512×512 ... ミラーイメージ(またはAXBサイズ)でなければなりません。この: enter image description here

あなたが見ることができます下ステージを使用して、その画像を生成したサンプルコードとイメージ・俳優(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(); 
    } 
} 
関連する問題