2013-02-25 57 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