libgdx参与者-未绘制alpha操作

libgdx参与者-未绘制alpha操作,libgdx,action,actor,alpha,Libgdx,Action,Actor,Alpha,我有一个淡出/淡出动作的图像。大概是这样的: public void fadeInAndOut() { AlphaAction actionFadeOut = new AlphaAction(); actionFadeOut.setAlpha(0f); actionFadeOut.setDuration(2f); AlphaAction actionFadeIn = new AlphaAction(); actionFadeIn.setAlpha(1f);

我有一个淡出/淡出动作的图像。大概是这样的:

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) {
    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);
}
但是调用此方法时不会发生任何事情

我的绘画方法是:

@Override
public void draw(Batch batch, float parentAlpha) {
    super.draw(batch, parentAlpha);
    batch.draw(objectImage, getX(), getY(), getWidth() * getScaleX(),
            getHeight() * getScaleY());
}
如何使图像的alpha值正常工作


提前谢谢

为了使图像的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(...);
正如上面所说,我们需要像这样覆盖绘制

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) {
    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);
否则,在某些情况下,舞台色彩也会受到影响,而不仅仅是演员


希望有帮助

我试过这个,但不起作用,我看不到任何alpha变化。我在绘图中添加了这条线:Gdx.app.log(“xx”,“alpha:+parentAlpha”);它总是1.0你记得启用alpha混合吗
batch.enableblinging()
如果您的操作是在act()方法上进行的,您可能在自定义actor中重写了act方法,而没有调用super.act()。通常情况下,stage.act为您处理操作。最后一行不应该是:
batch.setColor(color.r、color.g、color.b、color.a)以正确恢复内容?或者只是
batch.setColor(颜色)?为仍然无法使其工作的人评论。我调用了batch.getColor(),但它不想工作,我没有注意到在本例和其他示例中,您在actor上调用getColor,而不是批处理!如果每个参与者在绘制之前设置他们想要的颜色,则无需再次调用
setColor
。此外,如果您想这样做,您应该存储原始批处理颜色,并通过
batch.getColor()
恢复该颜色。