Показать сообщение отдельно
Старый 27.05.2011, 20:32
vbpro вне форума Посмотреть профиль Отправить личное сообщение для vbpro Найти все сообщения от vbpro
  № 1  
Ответить с цитированием
vbpro

Регистрация: May 2011
Сообщений: 8
Question От чего зависит время создания экземпляров классов MovieClip?

Добрый день!

Делаю онлайн игру. Игрок летает по карте и объекты, которые должны попасть в поле его зрения добавляются в ролик.

Столкнулся с такой ситуацией:
(UniversalShip - символ)
var mc:UniversalShip = new UniversalShip() занимает 5 мс. Конструктор специально замерял - столько времени не занимает. Мне нужно создать таких экземпляров за раз штук 300.
Учитывая время на добавление клипа в ролик и т.п. - около 10 мс, т.е. в сумме на 1 такой клип - 15мс.
300 клипов - 4,5 с - явно больше 60 мс (для частоты кадров 24/с).

Окей, с 300 клипами я немного переборщил, это был "стресс тест" для игры. Но, учитывая игроков, НПС и другие игровые объекты может понадобиться создание около 20-30 экземпляров клипа за период одного кадра (450 мс уже не так много, но все же fps падает ужасно, нужно сократить время добавления клипа раз в 10!).

Вопрос: как это оптимизировать?

Кстати, столько же объектов и удаляется, а так как очистка памяти у флэша срабатывает примерно через равные промежутки времени, то в такие моменты игра подвисает примерно на пол секунды. Как это исправить? Или дело не может быть в очистке памяти?

Зависит ли время создания экземпляра MovieClip от количества кадров в клипе? Клип не должен проигрываться, а только стоять на одном кадре. Дело в том, что символ UniversalShip содержит все корабли в отдельных кадрах. Игра получает с сервера тип корабля и переключает клип (gotoAndStop) на фрейм с названием - "тип корабля".

Может, стоит сделать первый кадр пустым для ускорения создания и добавления клипа в ролик?