![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 4
|
Доброго времени суток,
Подскажите , кто знает ! Вопрос : Как отрисовать кадр-N анимированного MovieClip'a , если на его тайм-лайне лежат вложенные анимированные MC со своим таймлайн ??? Проблема : Приведенный ниже способ позволяет "отрисовывать" анимированный MC только если в нем (на тайм-лайне) либо нет вложенных MC. либо если вложенные анимации являются типом Graphic не MovieClip. ( но в Graphic не сделать нормальные эффекты ) А если вложены MovieClip'ы, то не зависимо от вызова для основного movie.gotoAndStop(N) вложенные MC всегда находятся на кадре 1. // загрузили swf var movie:MovieClip = ... // берем каждый кадр for (var i:int = 0; i < movie.totalFrames; i++) { movie.gotoAndStop(i + 1); rect = movie.getBounds(movie); ... // И рисуем в Кэш var frame:BitmapData = new BitmapData( rect.width, rect.height, true, 0x00000000); frame.draw(movie, matrix, null, null, null, true); ... } Спасибо ! PS Перебирать всех "Детей" на этом кадре и вызывать для них gotoAndStop , нереально, так как у вложееныех MC свой тайм-лайн со своим кол-вом кадров. |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 4
|
Проблема не в переходе на кадр ,
а в детях, которые не переходят на след кадр вместе с родителем. На кадре 1 проблем нет, но уже на кадре 2 , вложенные MC всё ещё на кадре 1. Точнее BitmapData.draw отрисовывает только их первый кадр. |
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: Nov 2013
Сообщений: 4
|
Всем cпасибо !
Мысль ясна, решение похоже только одно : вручную "двигать" детей на след кадр. PS Вот код , если кому пригодиться для решения подобной задачи. private var _frames:Vector.<BitmapData>; private function cacheMc( movie:MovieClip ):void { for (var i:int = 0; i < movie.totalFrames; i++) { addFrame(movie); goToNextFrame(movie); } } private function addFrame(movie:MovieClip):void { var bmd:BitmapData = createBitmap(movie); _frames.push(bitmap); // или Ваша реализация хранения BitmapData } static private function goToNextFrame(mc:MovieClip):void { if(mc.currentFrame == mc.totalFrames) mc.gotoAndStop(1); else mc.nextFrame(); for (var i:int = 0; i < mc.numChildren; i++) { var child:DisplayObject = mc.getChildAt(i); if(child is MovieClip) goToNextFrame(child as MovieClip); } } static private function createBitmap(movie:MovieClip):BitmapData { var matrix:Matrix = new Matrix(); var rect:Rectangle = movie.getBounds(movie); matrix.rotate(movie.rotation * DEG_TO_RAD); matrix.scale(movie.scaleX, movie.scaleY); matrix.tx = -rect.left; matrix.ty = -rect.top; var frame:BitmapData = new BitmapData(rect.width , rect.height, true, 0x00000000); frame.draw(movie, matrix, null, null, null, true); return frame; } |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|