Libgdx演员 - Alpha动作没有被绘制

3

我有一张图片,需要实现淡出/淡入效果。就像这样:

public void fadeInAndOut() {
    AlphaAction actionFadeOut = new AlphaAction();
    actionFadeOut.setAlpha(0f);
    actionFadeOut.setDuration(2f);
    AlphaAction actionFadeIn = new AlphaAction();
    actionFadeIn.setAlpha(1f);
    actionFadeIn.setDuration(2f);

    this.addAction(Actions.sequence(actionFadeOut, Actions.delay(2f), actionFadeIn));
}

但是调用这个方法时没有任何反应。
我的绘制方法是:
@Override
public void draw(Batch batch, float parentAlpha) {
    super.draw(batch, parentAlpha);
    batch.draw(objectImage, getX(), getY(), getWidth() * getScaleX(),
            getHeight() * getScaleY());
}

如何使图像的 Alpha 值生效?

提前致谢!


你的操作在act()方法中进行,你可能已经在自定义演员中重写了act方法,但没有调用super.act()。通常,stage.act会为您处理操作。 - Fuat Coşkun
2个回答

11

scene2d wiki所述,我们需要这样覆盖draw:

@Override
public void draw(Batch batch, float parentAlpha) {
    Color color = getColor();
    batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
    batch.draw(objectImage, getX(), getY(), getWidth() * getScaleX(),
            getHeight() * getScaleY());
    batch.setColor(color.r, color.g, color.b, 1f);
}

那么...

----- 更新 -----

在绘制下一条线之后,我不得不添加:

batch.setColor(color.r, color.g, color.b, 1f);

否则,在某些情况下,不仅演员会受到影响,舞台的颜色也会受到影响。

希望能有所帮助。


最后一行不应该是:batch.setColor(color.r, color.g, color.b, color.a);以正确恢复吗?或者只需要batch.setColor(color); - EntangledLoops
对于那些仍然无法使其工作的人,我有一个提示。我调用了batch.getColor(),但它不想工作,我没有注意到在这个和其他示例中,您需要在actor上调用getColor,而不是batch! - gaRos
如果每个演员在绘制之前设置他们想要的颜色,就不需要再次调用setColor。此外,如果您想这样做,应该存储原始批处理颜色并通过batch.getColor()恢复它。 - EntangledLoops

1
为使图像的 alpha 值生效,您需要像这样更改 spriteBatch 的颜色:
Color color = batch.getColor();
batch.setColor(color.r, color.g, color.b, parentAlpha); //Sets the alpha of the batch without changing the color

batch.draw(...);

我尝试过这个,但它不起作用,我没有看到任何的Alpha变化。我在draw中添加了这行代码:Gdx.app.log("xx", "alpha: " + parentAlpha); 但它总是1.0。 - nano
你记得启用 alpha 混合了吗?batch.enableBlending() - EntangledLoops
颜色 - 不是批处理,而是使用Actor进行编程。 - Владислав Шестернин

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接