我正在使用LibGDX进行项目,我正在尝试在特定数量的空间内平铺/重复纹理。目前我使用的TextureRegion设置为适当的大小,并且正如您在OpenGL中使用“Clamp To Edge”所期望的那样填充纹理的任何额外空间。我认为有一种简单的方法可以将这种行为改为“重复”模式,但是我似乎无法找到一种方法来完成这项工作,尽管看起来它应该很容易改变。
所以,基本上,有一种简单的方法可以使用LibGDX在设定区域内重复图像,而不必通过在某种形式的循环中重复纹理来手动构建它吗?
答案 0 :(得分:6)
如果您使用TextureRegion
,则可以使用TiledDrawable,如下所示:
TiledDrawable tile = new TiledDrawable(textureRegion);
tile.draw(spriteBatcher, x, y, width, height);
答案 1 :(得分:3)
您可以使用" SetWrap"在纹理上并基于该纹理创建TextureRegion。 重要事项:我花了一段时间来弄明白,但要进行镜像,你的纹理必须是两个尺寸的力量。它在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);
下面您可以看到使用舞台和图像演员(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();
}
}
答案 2 :(得分:1)
我自己没有试过这个,但是在尝试解决另一个问题时我在谷歌上发现了这个帖子。在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)
这不是纹理区域,而是纹理本身......