如何使用Pixmap纹理处理libGDX Image的简历

时间:2014-02-03 08:47:34

标签: libgdx

我有一个从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使用它是个问题。

2 个答案:

答案 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中暂停前。