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()
恢复该颜色。