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

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

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

Регистрация: Aug 2011
Сообщений: 65
Question Остановка всей анимации(ускорение работы флешки)

Всем добрый день, есть флешка и в ней куча анимации в ней все движется и вертится.
Есть два вопроса:
1. Есть ли какой то способ оптимизации флешки, точнее ее анимации? Возможно ли какое то кэширование графики для ускорения или что то другое?
2. Есть функция остановки всей анимации, описанная ниже. Она что то отказывается работать, в качестве входной переменной передаю stage. Проблема в том, что есть классы которые много раз перенаследуются и функция getQualifiedSuperclassName не помогает, что можете посоветовать?
Код AS3:
public static function stopAllAnimation(dObj:*):void
		{
			if (getQualifiedSuperclassName(dObj) == 'flash.display::MovieClip'
			 || getQualifiedSuperclassName(dObj) == 'flash.display::Sprite'
			 || getQualifiedSuperclassName(dObj) == 'flash.display::DisplayObjectContainer'
			 || getQualifiedClassName(dObj) == 'flash.display::MovieClip'
			 || getQualifiedClassName(dObj) == 'flash.display::Sprite'
			 || getQualifiedClassName(dObj) == 'flash.display::DisplayObjectContainer')
			{
				if (getQualifiedClassName(dObj) == 'flash.display::MovieClip'
				 || getQualifiedSuperclassName(dObj) == 'flash.display::MovieClip')
				{
					MovieClip(dObj).gotoAndStop(0);
				}
				for (var i:uint = 0; i < DisplayObjectContainer(dObj).numChildren; i++)
					stopAllAnimation(DisplayObjectContainer(dObj).getChildAt(i));
			}
		}
Заранее всем спасибо!

Старый 24.04.2012, 12:47
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 2  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
откуда вы это взяли и зачем вы это делаете? Может стоит использовать оператор is? И вообще зачем такое творить?
__________________
:)


Последний раз редактировалось Aquahawk; 24.04.2012 в 12:51.
Старый 24.04.2012, 12:56
Hamid вне форума Посмотреть профиль Отправить личное сообщение для Hamid Найти все сообщения от Hamid
  № 3  
Ответить с цитированием
Hamid

Регистрация: Aug 2011
Сообщений: 65
Не откуда не взял, сам написал), is не всегда работает корректно. Он тоже не подходит. Это нужно для проверки приложения. Т.е. мне нужно всех детей сцены перебрать и те из них которые мувики остановить.


Последний раз редактировалось Hamid; 24.04.2012 в 12:58.
Старый 24.04.2012, 13:08
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 4  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
почему is то не работает? Рекурсивную функцию вам надо сделать, и если это контейнер то идти по детям и тормозить.

Добавлено через 4 минуты
Код AS3:
public function stopAll(obj:DisplayObject):void {
			if (!obj) return;
 
			if (obj is MovieClip) (obj as MovieClip).stop();
 
			var objContainer:DisplayObjectContainer = obj as DisplayObjectContainer;
			if (objContainer) {
				for (var i:int = 0; i < objContainer.numChildren; i++ ) {
					stopAll(objContainer.getChildAt(i));
				}
			}
		}
__________________
:)

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

Регистрация: Mar 2010
Сообщений: 48
воспользуйтесь лучше оператором is, он работает корректно всегда
Код AS3:
public static function stopAllAnimation( dObj:* ):void {
	if ( dObj is MovieClip ) {
		( dObj as MovieClip ).gotoAndStop( 0 );
	}
	if ( dObj is DisplayObjectContainer ) {
		for (var i:uint = 0; i < ( dObj as DisplayObjectContainer ).numChildren; i++) {
			stopAllAnimation( ( dObj as DisplayObjectContainer ).getChildAt( i ) );
		}
	}
}

Старый 24.04.2012, 13:13
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 6  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
приведите пример когда is не работает.

Добавлено через 39 секунд
bublic_bicubic
__________________
:)

Старый 24.04.2012, 13:24
Hamid вне форума Посмотреть профиль Отправить личное сообщение для Hamid Найти все сообщения от Hamid
  № 7  
Ответить с цитированием
Hamid

Регистрация: Aug 2011
Сообщений: 65
Aquahawk, bublic_bicubic - спасибо большое(+1). Я ошибся так работает гораздо лучше. Что касается не корректности is, был случай когда то, я вшивал графику Embed-ом в билдере, и при создании класса из этого эмбеда as не палил что там спайт, мувиклип. С тех пор я его боюсь использовать). А что можете подсказать по первому вопросу, есть вот такая штука cacheAsBitmap, но в каких случаях она имеет смысл я не совсем понял.

Попробовал cacheAsBitmap ко всем применить, существенно заметно стала разница, все стало быстрее, что еще можно предпринять?


Последний раз редактировалось Hamid; 24.04.2012 в 13:29.
Старый 24.04.2012, 13:34
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 8  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
А as и is не спалят ни спрайт ни мувиклип если эмбеддите графику руками, там толи битмап толи битмапдата будет, не помню точно.

cacheAsBitmap это отрисовка вектора в битмапу. Надо например если вы имеете сложную статическую векторную графику, градиенты там всякие, кривые, и вы это собираетесь двигать всё целиком, то тогда это дело отрисуется в битмап и будет двигаться растр. Применять надо совместно с pixelSnapping и целочисленными координатами.

Если у вас есть анимация, и вы сделаете cacheAsBitmap то, как правило, станет только хуже, потом что каждый кадр, когда что-то двигается плеер опять будет перерисовывать это в битмап, на следующем кадру удалять и опять перерисовывать. Может помочь только руками создать вектор этих битмап и их перещёлкивать.

Добавлено через 43 секунды
Ну и традиционно, ручной кешинг работает всегда лучше встроенного.
__________________
:)

Старый 24.04.2012, 13:43
bublic_bicubic вне форума Посмотреть профиль Отправить личное сообщение для bublic_bicubic Найти все сообщения от bublic_bicubic
  № 9  
Ответить с цитированием
bublic_bicubic
 
Аватар для bublic_bicubic

Регистрация: Mar 2010
Сообщений: 48
Цитата:
Сообщение от Hamid Посмотреть сообщение
Aquahawk, bublic_bicubic - спасибо большое(+1). Я ошибся так работает гораздо лучше. Что касается не корректности is, был случай когда то, я вшивал графику Embed-ом в билдере, и при создании класса из этого эмбеда as не палил что там спайт, мувиклип. С тех пор я его боюсь использовать). А что можете подсказать по первому вопросу, есть вот такая штука cacheAsBitmap, но в каких случаях она имеет смысл я не совсем понял.
cacheAsBitmap имеет смысл в случае если объект, которому выставляется cacheAsBitmap не анимируется внутри

Старый 24.04.2012, 13:45
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 10  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Интересно почему у меня cacheAsBitmap стало жёлтым. А вообще именно это и имел вииду, нет анимации => cacheAsBitmap может быть поможет. А может и не поможет.
__________________
:)

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

Теги
movieclip , анимация , тормоза , ускорение
Опции темы
Опции просмотра

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

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


 


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


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