6

我创建了一个AnimatedSprite类,它绘制了一个特定的TextureRegion. 有时我需要一个 tint 颜色效果,所以我设置(this.color 是Colormy 的一个字段AnimatedSprite):

super.draw(batch, parentAlpha);

batch.setColor(this.color);
batch.draw(this.frames[this.currentFrame], x, y, originX, originY, width, height, scaleX, scaleY, rotation)
batch.setColor(Color.WHITE);

但是,当我将AnimatedSprite的颜色设置为黑色或任何颜色时,其他所有颜色都具有该颜色。我什至尝试flush(),结束批次并开始一个新的,等等......但似乎没有任何效果。

请帮我正确应用色调效果。我会很感激任何想法。

4

2 回答 2

8

当心共享可变Color对象!如果你这样做:

this.color = Color.WHITE;

然后再变异this.color,你会变异Color.WHITE,这通常是错误的!:)

Color在构造要变异的对象时始终制作副本:

this.color = new Color(Color.WHITE);

libGDX 中的许多对象都是这样可变的(而常规 Java 库中的类似对象将是不可变的),因为 libGDX (理所当然地)非常关心 GC 开销。

于 2013-02-16T15:08:13.527 回答
1

而不是使用

this.color = new Color(Color.WHITE);

你可以使用:

batch.setColor(Color.WHITE.tmp());

这将创建一个白色的临时副本,对我来说似乎更干净。

于 2015-09-13T22:54:51.533 回答