2013-02-25 53 views
1

我在写一个游戏AndEngine在那里我把几十个精灵放进一个SpriteBatch。这需要完成,否则当我自己绘制每个精灵时,帧频会急剧下降。 我的问题是,我该如何改变整个SpriteBatch的颜色?AndEngine SpriteBatch setColor()不起作用

这是我如何创建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(...)设置为每个单独的精灵时,颜色只会改变。我在这里做错了什么?有另一种方法吗?

每一个小小的提示是赞赏!谢谢。

编辑:我的解决方案
作为卡梅伦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类时,我当然会非常感兴趣! :)

回答

2

尽管SpriteBatch有一个setColor(),这实际上只是它扩展Shape的工件。两种可能的解决方案:

(1)分别为每个sprite着色。

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)修改SpriteBatch在AndEngine

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

如果你在AndEngine中干净地实现它,你甚至可以提交它作为源的可能改变。 (它是开源的,乐意参与。)

+0

谢谢!我将尝试找出如何修改spritebatch,使其具有颜色字段。如果我不能,我可能不得不使用(1)..但至少我知道我现在站在哪里,谢谢。 – GameDroids 2013-02-25 20:12:14