(LibGDX)改变演员的颜色

时间:2015-02-20 23:27:04

标签: java libgdx

所以,我有一个扩展Actor的类,我正在尝试更改它的alpha值; objectPreview是该类的一种类型:

@Override
public void display() {

    ...

    // remove previous object preview from stage
    objectPreview.remove();

    ... 

    // add a translucent preview of where the object will be added
    objectPreview.getColor().a = 0.5f;
    stage.addActor(objectPreview);

    ...

    stage.draw();
}

这是我自定义draw的{​​{1}}方法:

Actor

每帧调用@Override public void draw(Batch batch, float alpha) { batch.enableBlending(); batch.draw(texture, pos.x, pos.y); } 方法,display是添加到objectPreview的{​​{1}}。

但是,修改Actor的Alpha值不起作用。

否则,这将按预期工作,在屏幕上预览stage并每帧清除/重绘它。

我也尝试了objectPreview方法,但这不起作用。即使我改变了r,g,b vaulues,也没有任何反应;对象仍然是原始的Actor纹理。

为什么演员的setColor()不会改变?

1 个答案:

答案 0 :(得分:5)

当您继承Actor时,您可以在draw方法中应用自己的颜色。我不确定为什么他们没有将它构建到Actor类中,除非可能有太多可能使用颜色的方法,或者因为某些Actors没有任何关联它们的视觉效果,所以应用这种颜色会浪费时间。

首先,请注意,传递给draw方法的第二个参数是parentAlpha,而不是alpha,因为您已经标记了它。这是因为父母的alpha应该乘以孩子的alpha以获得适当的淡入淡出效果。

因此,您更新的draw方法应如下所示:

@Override
public void draw(Batch batch, float parentAlpha) {
    batch.enableBlending(); //You can probably remove this line*
    Color color = getColor(); //keep reference to avoid multiple method calls
    batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
    batch.draw(texture, pos.x, pos.y);
}

/*    * It would only be useful if you have some custom Actors that disable blending. 
I don't think any of the built-in actors disable blending. Since many actors will 
require blending, it is usually best to leave it on even for fully opaque sprites, in 
order to avoid ending up with many draw calls. */

另请注意,如果您想利用Actor已有的scaleXscaleY字段,那么您也可以相应地修改draw方法使用它们。