6

プロジェクトに LibGDX を使用しており、特定のスペースにテクスチャを並べて表示/繰り返し表示しようとしています。現時点では、適切なサイズに設定された TextureRegion を使用しており、「Clamp To Edge」を使用して OpenGL で期待されるように、テクスチャから離れた余分なスペースが埋められています。この動作を「リピート」モードに変更する簡単な方法があると思いましたが、かなり簡単に変更できるはずのように見えますが、それを機能させる方法が見つからないようです。

基本的に、LibGDXを使用して設定された領域で画像を繰り返す簡単な方法はありますか?

4

3 に答える 3

7

を使用している場合は、次のようにTiledDrawableTextureRegionを使用できます。

TiledDrawable tile = new TiledDrawable(textureRegion);
tile.draw(spriteBatcher, x, y, width, height);
于 2014-03-04T13:42:15.160 に答える
4

テクスチャで「SetWrap」を使用し、そのテクスチャに基づいて TextureRegion を作成できます。 重要:理解するのにしばらく時間がかかりましたが、ミラーリングするには、テクスチャが 2 のべき乗サイズである必要があります。Android では動作していましたが、iOS では動作していませんでした。メッセージが表示されず、黒く表示されました。したがって、4x4 または 8x8、16x16 .. 256x256 または 512x512 .. 3x3 ミラー イメージ (または 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);

これを提供します: ここに画像の説明を入力

以下に、Stage and Image Actor (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();
    }
}
于 2015-10-04T13:52:07.360 に答える
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 .テクスチャラップ)

ただし、これはテクスチャ領域ではなく、テクスチャ自体のためのものです...

于 2012-12-03T01:11:55.300 に答える