我正在用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/