Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.03.2013, 00:14
iiiusion вне форума Посмотреть профиль Отправить личное сообщение для iiiusion Найти все сообщения от iiiusion
  № 1  
Ответить с цитированием
iiiusion

Регистрация: Aug 2012
Сообщений: 23
По умолчанию Вопрос по "длинным массивам"

Доброе время суток.
Ситуация следующая:
Создаю вектор из 100000 графических элементов, при этом не добавляю эти элементы на сцену. Памяти на это ушло порядка 300Mb. Операций ни каких с этим вектором не провожу, но fps падает в два раза. Что за дела?) Кто-нибудь может прояснить причину падения fps? Понятно что мне не нужно столько элементов), вопрос скорее теоретически-гипотетический)
Спасибо.


Код AS3:
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);
	}
}

Старый 07.03.2013, 00:34
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 2  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Enemy01 - часом не мувики, в которых крутится анимация? Что там внутри?

Старый 07.03.2013, 00:47
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 3  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Может кстати в конструкторе Enemy01 сслыка на какие- нибудь циклические функции, которые выполняются в фоновом режиме.
Поддерживая mikhailk попрошу скинуть код (хотя бы конструктор) класса Enemy01)

Старый 07.03.2013, 00:50
iiiusion вне форума Посмотреть профиль Отправить личное сообщение для iiiusion Найти все сообщения от iiiusion
  № 4  
Ответить с цитированием
iiiusion

Регистрация: Aug 2012
Сообщений: 23
Сеперкласс Sprite, внутри действительно есть несколько MovieClip, но анимации там нет. Пробовал создать вектор из 1000000 Sprite без отрисованной графики в конструкторе, заняло 800mb. Тормозов нет.

вот то что в конструкторе
Код AS3:
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;
 
 
		}

Старый 07.03.2013, 00:56
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 5  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
свойство .visible = false не освобождает процессор от отрисовки объектов, внутри программы они все еще продолжают жить и работать, со всеми вытекающими в виде падения fps.
Обычно делают функции initialize() и dispose() в которых добавляют или удаляют нужные объекты с экрана

проблема начинается со строчки
Код AS3:
addChild (_Child);

Старый 07.03.2013, 01:05
iiiusion вне форума Посмотреть профиль Отправить личное сообщение для iiiusion Найти все сообщения от iiiusion
  № 6  
Ответить с цитированием
iiiusion

Регистрация: Aug 2012
Сообщений: 23
не я не пойму)

коменчу:
Код AS3:
addChild (_Child);
_Child.bodyHT.visible = false;
- тормозит

коменчу:
Код AS3:
public var _Child:Enemy01MC = new Enemy01MC();
- всё гладко(правда при этом не 300mb уходит а 170Mb, хотя как показывают эксперименты - объём не вляет на fps)

Старый 07.03.2013, 01:06
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 7  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
внутри действительно есть несколько MovieClip, но анимации там нет.
Она явно остановлена?

Меня в свое время замучили мувиками с непредсказуемой анимацией внутри. Поэтому в любых мувиках, которые мне готовили другие флешеры, перед использованием я останавливал анимацию вот таким грубоватым способом:

Код AS3:
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 - класс со служебными функциями):

Код AS3:
var anyMC:AnyMC = new AnyMC(); 
ServiceFunctions.stopAllAnimationInContainer(anyMC);
addChild(anyMC);

Старый 07.03.2013, 01:07
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Оффтоп. - блин ну не пользуйтесь вы public var ! это ужасно
__________________
Марк Tween

Старый 07.03.2013, 01:30
iiiusion вне форума Посмотреть профиль Отправить личное сообщение для iiiusion Найти все сообщения от iiiusion
  № 9  
Ответить с цитированием
iiiusion

Регистрация: Aug 2012
Сообщений: 23
в общем прописал stop() для мувика, удалил всю графику из него(чистый мувиклип), удалил единственный кадр из него.
та же ерунда. тормоза изчезают только когда убираю "= new Enemy01MC()". дела)

Старый 07.03.2013, 09:27
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 10  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
А если

Код AS3:
var _Enemy01:Enemy01 = new Enemy01();
заменить на

Код AS3:
var _Enemy01:Sprite = new Sprite();
тормоза остаются?

А если на

Код AS3:
var _Enemy01:MovieClip= new MovieClip();
?

Добавлено через 2 часа 0 минут
В общем, Вы что-то не так делаете.
Провел испытания:

1. Кидаем в массив 100000 спрайтов - на FPS никак не сказывается и грузится мгновенно
2. Кидаем в массив 100000 мувиков с анимацией (я кидал микропрелоадер "крутящееся колесико") - грузится долго и FPS падает катастрофически
3. Кидаем в массив 100000 тех же мувиков, но с остановкой анимации - грузится долго, но на FPS не влияет

Думаю, Вы просто не остановили анимацию.


Последний раз редактировалось mikhailk; 07.03.2013 в 11:29.
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.