我正在用 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(...)添加到每个sprite时,颜色才会发生变化我在这里做错了吗?还有另一种方式吗?
每一个小提示都表示赞赏!谢谢。
编辑:我的解决方案
正如 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保留所有原始精灵,并且每次重新初始化批处理对我来说仍然足够快。但当有人成功扩展SpriteBatch类时,我当然会非常感兴趣! :)
答案 0 :(得分:2)
虽然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将它绘制的精灵的颜色设置为其存储的颜色字段。
如果您在AndEngine中干净地实现它,您甚至可以将其作为源的可能更改提交。 (它是开源的。有趣的参与。)