我有一个从Pixmap构建的com.badlogic.gdx.scenes.scene2d.ui.Image。 Pixmap只有一个像素,因为我用它来构建一个可以淡入淡出的背景图像。
Pixmap pmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
pmap.setColor(1.0f, 1.0f, 1.0f, 1.0f);
pmap.drawPixel(0, 0);
bgImage = new Image(new Texture(pmap));
pmap.dispose();
bgImage.setSize(MyGame.VIRUAL_WIDTH, MyGame.VIRUAL_HEIGHT);
bgImage.getColor().a = 0.0f;
bgImage.addAction(Actions.sequence(Actions.fadeIn(1.0f),Actions.delay(3.0f),Actions.fadeOut(1.0f)));
stage.addActor(bgImage);
效果很好,但我担心的是游戏可能会在行动发生时暂停。我假设操作将在恢复时继续,因此我需要保持相同的Image但基础Pixmap不受管理,因此需要在恢复时重新创建。我无法弄清楚如何将纹理/ Pixmap重新附加到图像上。构建Pixmap本身很容易,但是让现有的Image使用它是个问题。
答案 0 :(得分:5)
我的解决方案如下
假设Pixmap pixmap = ...
TextureData texData = new PixmapTextureData(pixmap, Format.RGBA8888, false, false, true);
Texture texture = new Texture(texData);
Image image = new Image(texture);
PixmapTextureData中的最后一个标志是"托管"。它在我的身上运行。
您可以查看以下链接的第一部分,了解管理内容和不管理内容。 http://www.badlogicgames.com/wordpress/?p=1513
答案 1 :(得分:2)
setTexture
上没有Image
方法。查看the Image(Texture)
constructor它将纹理包裹在可绘制区域中:
this(new TextureRegionDrawable(new TextureRegion(texture)));
所以你可以做类似的事情并使用Image.setDrawable
方法来改变使用的可绘制对象。像这样:
bgImage.setDrawable(new TextureRegionDrawable(new TextureRegion(new Texture(pmap))));
我认为您可以重用TextureRegion
及其所有容器(因此在生成新的pixmap之后,只需将其包装在Texture
中并将其推送到保存的TextureRegion
中暂停前。