|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2011
Сообщений: 65
|
Остановка всей анимации(ускорение работы флешки)
Всем добрый день, есть флешка и в ней куча анимации в ней все движется и вертится.
Есть два вопроса: 1. Есть ли какой то способ оптимизации флешки, точнее ее анимации? Возможно ли какое то кэширование графики для ускорения или что то другое? 2. Есть функция остановки всей анимации, описанная ниже. Она что то отказывается работать, в качестве входной переменной передаю stage. Проблема в том, что есть классы которые много раз перенаследуются и функция getQualifiedSuperclassName не помогает, что можете посоветовать? 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)); } } |
|
|||||
Регистрация: Aug 2011
Сообщений: 65
|
Не откуда не взял, сам написал), is не всегда работает корректно. Он тоже не подходит. Это нужно для проверки приложения. Т.е. мне нужно всех детей сцены перебрать и те из них которые мувики остановить.
Последний раз редактировалось Hamid; 24.04.2012 в 12:58. |
|
|||||
почему is то не работает? Рекурсивную функцию вам надо сделать, и если это контейнер то идти по детям и тормозить.
Добавлено через 4 минуты 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)); } } }
__________________
:) |
|
|||||
Регистрация: Mar 2010
Сообщений: 48
|
воспользуйтесь лучше оператором is, он работает корректно всегда
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 ) ); } } } |
|
|||||
Регистрация: Aug 2011
Сообщений: 65
|
Aquahawk, bublic_bicubic - спасибо большое(+1). Я ошибся так работает гораздо лучше. Что касается не корректности is, был случай когда то, я вшивал графику Embed-ом в билдере, и при создании класса из этого эмбеда as не палил что там спайт, мувиклип. С тех пор я его боюсь использовать). А что можете подсказать по первому вопросу, есть вот такая штука cacheAsBitmap, но в каких случаях она имеет смысл я не совсем понял.
Попробовал cacheAsBitmap ко всем применить, существенно заметно стала разница, все стало быстрее, что еще можно предпринять? Последний раз редактировалось Hamid; 24.04.2012 в 13:29. |
|
|||||
А as и is не спалят ни спрайт ни мувиклип если эмбеддите графику руками, там толи битмап толи битмапдата будет, не помню точно.
cacheAsBitmap это отрисовка вектора в битмапу. Надо например если вы имеете сложную статическую векторную графику, градиенты там всякие, кривые, и вы это собираетесь двигать всё целиком, то тогда это дело отрисуется в битмап и будет двигаться растр. Применять надо совместно с pixelSnapping и целочисленными координатами. Если у вас есть анимация, и вы сделаете cacheAsBitmap то, как правило, станет только хуже, потом что каждый кадр, когда что-то двигается плеер опять будет перерисовывать это в битмап, на следующем кадру удалять и опять перерисовывать. Может помочь только руками создать вектор этих битмап и их перещёлкивать. Добавлено через 43 секунды Ну и традиционно, ручной кешинг работает всегда лучше встроенного.
__________________
:) |
|
|||||
Регистрация: Mar 2010
Сообщений: 48
|
Цитата:
|
Часовой пояс GMT +4, время: 02:29. |
|
« Предыдущая тема | Следующая тема » |
Теги |
movieclip , анимация , тормоза , ускорение |
Опции темы | |
Опции просмотра | |
|
|