Показать сообщение отдельно
Старый 24.08.2009, 08:05
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 1  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
По умолчанию Вопросы оптимизации игры

Привет всем,
мы создаем мультиплеер-файт игру. У меня есть пара общих вопросов по оптимизации:

1. Загрузка ресурсов (раскадрованные PNG одинакового размера по ширине и высоте). Игрок настраиваемый, т.е. состоит из разных частей, каждая из которых отдельный PNG файл с прозрачностью. Композиция частей это обычное наложение в нужном порядке, например: тело (1), волосы (2), шорты (3) и т.д. Сейчас мы имеем 12 действий игроков (действие - это набор фреймов (не флешевых ), фрейм - набор PNG файлов) по 4 части в каждом (тело, волосы, шорты, футболка), получается 908 PNG-файлов.
Я реализовал так, что все эти файлы грузятся последовательно, но хоть они небольшие, получается очень-очень долго раз в 5-10 медленне, чем один файл.
Заказчик предоставляет ресурсы в PNG файлах, все действия и части описаны в XML, который отдает сервер. Относительно этих XML я формирую пути для загрузки PNG-файлов. Понимаю, что запихать все в одну SWF-библиотеку было бы выходом, но потеряем гибкость. Что можете посоветовать по этому поводу?

2. 908 PNG файлов занимают чуть более 1 Гб в оперативной памяти
Фрейм я делаю так: Bitmap, в него я отрисовываю (draw()) DisplayObjectContainer, который содержит битмапы PNG. Думал, что это самый оптимальный способ. Но я так думаю, что эти PNG продолжают висеть в памяти, а мне нужно хранить лишь композицию этих PNG, т.е., например, вместо 4 PNG (тело, волосы, шорты, футболка) хранить одну (одетый волосатый чувак с телом). Что можете посоветовать по этому поводу тоже?

Заранее спасибо за помощь!

Добавлено через 45 минут
Еще про пункт (2):
Сейчас я делаю примерно так:
Код AS3:
var container:Sprite = new Sprite();
var element:DisplayObject;
 
for (var i:uint = 0; i < _loader.getBinariesArray().length; i++) {
	element = _loader.getBinariesArray()[i];
	container.addChild(element);
}
 
var bmpData:BitmapData = new BitmapData(GlobalSettings.CHARACTER_IMAGE_WIDTH, GlobalSettings.CHARACTER_IMAGE_HEIGHT, true, 0);
bmpData.draw(container);
bitmapData = bmpData;
Мне кажется, что у меня element, в котором PNG, хранится очень долго, они ведь мне не нужны, мне нужна лишь БитмапДата.
Вызов GarbageCollector не помогает.


Последний раз редактировалось enepx; 24.08.2009 в 09:18. Причина: добавил про прозрачность