Просмотр полной версии : Вопрос по "длинным массивам"
iiiusion
07.03.2013, 00:14
Доброе время суток.
Ситуация следующая:
Создаю вектор из 100000 графических элементов, при этом не добавляю эти элементы на сцену. Памяти на это ушло порядка 300Mb. Операций ни каких с этим вектором не провожу, но fps падает в два раза. Что за дела?) Кто-нибудь может прояснить причину падения fps? Понятно что мне не нужно столько элементов), вопрос скорее теоретически-гипотетический)
Спасибо.
public var Enemy01Arr:Vector.<Enemy01> = new Vector.<Enemy01>;
public function PObject(gameplay_:GamePlay)
{
_gameplay = gameplay_;
for (var value01:int = 0; value01 < 100000; value01 ++)
{
var _Enemy01:Enemy01 = new Enemy01();
Enemy01PoolArr.push(_Enemy01);
}
}
mikhailk
07.03.2013, 00:34
Enemy01 - часом не мувики, в которых крутится анимация? Что там внутри?
KumoKairo
07.03.2013, 00:47
Может кстати в конструкторе Enemy01 сслыка на какие- нибудь циклические функции, которые выполняются в фоновом режиме.
Поддерживая mikhailk попрошу скинуть код (хотя бы конструктор) класса Enemy01)
iiiusion
07.03.2013, 00:50
Сеперкласс Sprite, внутри действительно есть несколько MovieClip, но анимации там нет. Пробовал создать вектор из 1000000 Sprite без отрисованной графики в конструкторе, заняло 800mb. Тормозов нет.
вот то что в конструкторе
public class Enemy01 extends EnemiesSC
{
public var _gameplay:GamePlay
public var _Child:Enemy01MC = new Enemy01MC();
public function Enemy01()
{
//_gameplay = gameplay_;
addChild (_Child);
_Child.bodyHT.visible = false;
}
KumoKairo
07.03.2013, 00:56
свойство .visible = false не освобождает процессор от отрисовки объектов, внутри программы они все еще продолжают жить и работать, со всеми вытекающими в виде падения fps.
Обычно делают функции initialize() и dispose() в которых добавляют или удаляют нужные объекты с экрана
проблема начинается со строчки addChild (_Child);
iiiusion
07.03.2013, 01:05
не я не пойму)
коменчу:
addChild (_Child);
_Child.bodyHT.visible = false;
- тормозит
коменчу:
public var _Child:Enemy01MC = new Enemy01MC();
- всё гладко(правда при этом не 300mb уходит а 170Mb, хотя как показывают эксперименты - объём не вляет на fps)
mikhailk
07.03.2013, 01:06
внутри действительно есть несколько MovieClip, но анимации там нет.
Она явно остановлена?
Меня в свое время замучили мувиками с непредсказуемой анимацией внутри. Поэтому в любых мувиках, которые мне готовили другие флешеры, перед использованием я останавливал анимацию вот таким грубоватым способом:
public static function stopAllAnimationInContainer(container:DisplayObjectContainer) : void
{
if (!container) return;
if (container as MovieClip) (container as MovieClip).stop();
if (container.numChildren > 0)
{
for (var i:int = 0; i < container.numChildren; i++)
{
var child:DisplayObjectContainer = container.getChildAt(i) as DisplayObjectContainer;
if (child) stopAllAnimationInContainer(child);
}
}
}
Использовал, соответственно, так (ServiceFunctions - класс со служебными функциями):
var anyMC:AnyMC = new AnyMC();
ServiceFunctions.stopAllAnimationInContainer(anyMC);
addChild(anyMC);
Оффтоп. - блин ну не пользуйтесь вы public var ! это ужасно
iiiusion
07.03.2013, 01:30
в общем прописал stop() для мувика, удалил всю графику из него(чистый мувиклип), удалил единственный кадр из него.
та же ерунда. тормоза изчезают только когда убираю "= new Enemy01MC()". дела)
mikhailk
07.03.2013, 09:27
А если
var _Enemy01:Enemy01 = new Enemy01();
заменить на
var _Enemy01:Sprite = new Sprite();
тормоза остаются?
А если на
var _Enemy01:MovieClip= new MovieClip();
?
Добавлено через 2 часа 0 минут
В общем, Вы что-то не так делаете.
Провел испытания:
1. Кидаем в массив 100000 спрайтов - на FPS никак не сказывается и грузится мгновенно
2. Кидаем в массив 100000 мувиков с анимацией (я кидал микропрелоадер "крутящееся колесико") - грузится долго и FPS падает катастрофически
3. Кидаем в массив 100000 тех же мувиков, но с остановкой анимации - грузится долго, но на FPS не влияет
Думаю, Вы просто не остановили анимацию.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.