Lặp lại kết cấu trong libgdx


12

Làm thế nào để điền vào khu vực với kết cấu lặp đi lặp lại? Bây giờ tôi đang sử dụng phương pháp tiếp theo:

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

Nó rất rõ ràng. Có lẽ có bất kỳ xây dựng trong phương pháp?

Câu trả lời:



3

Bạn có thể sử dụng "SetWrap" trên kết cấu của mình và tạo TextureRegion dựa trên Texture đó. Để tạo hình ảnh được nhân đôi 3x3 (hoặc kích thước nách)

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

Quan trọng: Tôi phải mất một thời gian để tìm ra nó, nhưng để được nhân đôi, kết cấu của bạn phải là một sức mạnh có hai kích cỡ. Nó hoạt động trên Android nhưng không phải trên iOS và bạn không nhận được tin nhắn - nó được hiển thị màu đen. Vì vậy, nó phải là 4 x 4 hoặc 8 x 8, 16x16 .. 256x256 hoặc 512x512 ..

Sẽ cung cấp cho bạn điều này: nhập mô tả hình ảnh ở đây

Dưới đây bạn có thể thấy mã mẫu đã tạo ra hình ảnh đó bằng cách sử dụng Trình diễn sân khấu và hình ảnh (Cảnh2D)

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();
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.