AndEngine SpriteBatch setColor()不起作用

时间:2013-02-25 11:50:24

标签: java android sprite andengine

我正在用 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类时,我当然会非常感兴趣! :)

1 个答案:

答案 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中干净地实现它,您甚至可以将其作为源的可能更改提交。 (它是开源的。有趣的参与。)