2013-02-25 2 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);, ничего не происходит. Цвет меняется только тогда, когда я устанавливаюColor (...) для каждого отдельного спрайта, прежде чем рисовать SpriteBatch Я делаю что-то неправильно здесь? Есть ли другой способ?

Каждый маленький совет приветствуется! Спасибо.

Edit: Мое решение
Как 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! :)

ответ

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) Изменение SpriteBatch в AndEngine

Если вы действительно не хотите, чтобы цвет каждого спрайта, как об изменении класса SpriteBatch в AndEngine и добавить метод, который переопределяет SetColor() , Добавьте цветовое поле в spritebatch, отрегулируйте это поле, и затем, в методе рисования, попросите spritebatch установить цвет спрайта, который он рисует, в сохраненное цветовое поле.

Если вы реализуете это чисто в AndEngine, вы можете даже представить его как возможное изменение для источника. (Это с открытым исходным кодом. Приятно принять участие.)

+0

спасибо! Я попытаюсь выяснить, как изменить spritebatch, чтобы у него было поле цвета. Если я не могу, возможно, придется использовать (1) .. но по крайней мере я знаю, где я сейчас стою, спасибо. – GameDroids

Смежные вопросы