我正在用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);时,什么都不会发生。只有当i setColor(.)时,颜色才会改变对每一个精灵来说,在画SpriteBatch之前,我是不是做错了什么?还有别的办法吗?
每一个小小的暗示都是值得感激的!谢谢。
编辑:我的解决方案
正如卡梅隆·弗雷德曼所建议的(再次感谢!)我首先尝试直接扩展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类时,我会非常感兴趣!)
发布于 2013-02-25 17:07:42
尽管SpriteBatch有一个setColor(),但这实际上只是它扩展形状的一个工件。有两种可能的解决办法:
(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
如果您真的不想给每个sprite着色,那么修改AndEngine中的AndEngine类并添加一个覆盖setColor()的方法如何?向sprite批处理中添加一个颜色字段,让setcolor调整该字段,然后在绘图方法中,让sprite批处理将它要绘制的sprite的颜色设置到其存储的颜色字段中。
如果您在AndEngine中干净地实现了它,您甚至可以将它作为对源的可能更改提交。(它是开源的。(参与其中很有趣。)
https://stackoverflow.com/questions/15066317
复制相似问题