libgdx에서 텍스처 반복


12

반복 텍스처로 영역을 채우는 방법? 이제 다음 방법을 사용하고 있습니다.

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

매우 분명합니다. 아마도 내장 방법이 있습니까?

답변:



3

텍스처에 "SetWrap"을 사용하고 해당 텍스처를 기반으로 TextureRegion을 만들 수 있습니다. 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);

중요 : 알아내는 데 시간이 걸렸지 만, 미러링하려면 텍스처가 두 가지 크기의 힘이어야합니다. Android에서는 작동하지만 iOS에서는 작동하지 않으며 메시지가 표시되지 않습니다. 검은 색으로 표시되었습니다. 따라서 4x4 또는 8x8, 16x16 .. 256x256 또는 512x512 여야합니다.

당신에게 이것을 줄 것입니다 : 여기에 이미지 설명을 입력하십시오

아래에서는 스테이지 및 이미지 액터 (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();
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.