我正在用AndEngine编写游戏,在那里我将几十个精灵放到一个SpriteBatch中。这需要完成,否则当我自己绘制每个单独的精灵时,帧速率将急剧下降。
我的问题是,如何更改整个SpriteBatch的颜色?

这就是我创建SpriteBatch的方法:

ArrayList<Sprite> dozenSprites; // these are all the sprites of one SpriteBatch in a list
SpriteBatch spriteBatch = new SpriteBatch(spriteBatchTextureAtlas, dozenSprites.size(),vertexBufferObjectManager);

for (Sprite sprite : dozenSprites) {
        spriteBatch.draw(sprite);
}
spriteBatch.submit();


好吧,这没什么特别的。一切准备就绪后,我将SpriteBatch附加到场景中,并按预期显示。但是,当我呼叫spriteBatch.setColor(0.5f,0.5f,0.5f);时,什么也没有发生。仅当我在绘制SpriteBatch之前将setColor(...)设置为每个单独的精灵时,颜色才会更改。我在这里做错什么了吗?还有另一种方法吗?

每个小提示,不胜感激!谢谢。

编辑:我的解决方案
正如Cameron Fredmans所建议的(再次感谢!),我首先尝试直接扩展SpriteBatch class并实现setColor()方法。但是我不知道怎么做,所以我选择了快速而肮脏的版本:

 // initialize the SpriteBatch as above
 // and to change the color call:
 spriteBatch.reset();
 for (Sprite sprite : dozenSprites) {
        sprite.setColor( theNewColor );
        spriteBatch.draw(sprite);
 }
 spriteBatch.submit();


使用spriteBatch可以带来更多的性能,以至于让ArrayList保留所有原始Sprite并每次都重新初始化该批处理仍然足够快。但是,当有人成功扩展SpriteBatch类时,我当然会非常感兴趣! :)

最佳答案

尽管SpriteBatch具有setColor(),但这实际上只是扩展Shape的一种人工产物。两种可能的解决方案:

(1)为每个子画面分别上色。

ArrayList<Sprite> dozenSprites; // these are all the sprites of one SpriteBatch in a list
SpriteBatch spriteBatch = new SpriteBatch(spriteBatchTextureAtlas, dozenSprites.size(),vertexBufferObjectManager);

for (Sprite sprite : dozenSprites) {
        sprite.setColor(.5f, .5f, .5f);
        spriteBatch.draw(sprite);
}
spriteBatch.submit();


(2)在AndEngine中修改SpriteBatch

如果您真的不想为每个精灵着色,那么如何在AndEngine中修改SpriteBatch类并添加一个覆盖setColor()的方法。向spritebatch添加一个颜色字段,让setcolor调整该字段,然后在draw方法中,让spritebatch将其绘制的sprite的颜色设置为其存储的color字段。

如果您在AndEngine中完全实现了它,甚至可以将其提交为源代码的可能更改。 (它是开源的。参与其中很有趣。)

关于java - AndEngine SpriteBatch setColor()不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15066317/

10-09 03:02