Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   проблема с вложенными детьми в movieclip (http://www.flasher.ru/forum/showthread.php?t=137607)

darkchaos 17.03.2010 20:45

проблема с вложенными детьми в movieclip
 
Добрый день, уважаемое сообщество.

Столкнулся с такой проблемой: у меня есть MovieClip, в котором лежат другие мувики с анимацией. Для каждого из кадров главного мувика я делаю BitmapData, затем перехожу на следующий кадр, чтобы в скриншоте была анимация, я делаю переход всем внутренним мувикам на следующий кадр. Но в результате я не получаю анимации, а получаю первый статический кадр, хотя трейсы показывают, что создаются все кадры. Можно как-то решить эту проблему без использования таймера или же enter_frame?

Bond007 18.03.2010 13:41

Для чего вообще BitmapData.
Вообще, что хотите сделать, какая цель ?

darkchaos 18.03.2010 14:01

Цитата:

Сообщение от Bond007 (Сообщение 893917)
Для чего вообще BitmapData.
Вообще, что хотите сделать, какая цель ?

Такой метод мне необходим для визуального прироста производительности (т.к. много сложного вектора на сцене получится), памяти конечно больше уходит, но это уже вопрос оптимизации

nOobCrafter 18.03.2010 14:23

cacheAsBitmap - не подходит?
или вы не добавляя в дисплей лист перерисовываете?

darkchaos 18.03.2010 14:34

Цитата:

Сообщение от nOobCrafter (Сообщение 893929)
cacheAsBitmap - не подходит?
или вы не добавляя в дисплей лист перерисовываете?

Да, я не добавляю в дисплей лист, фактически мувик у меня создается 1 раз в начале, а потом хранится только коллекция из его кадров. Так что cacheAsBitmap не поможет, тем более что с этим есть кое-какие проблемы http://xitri.com/2009/03/27/cache_as...ternative.html

Bond007 18.03.2010 14:50

Приведите код или важные куски кода, а то как-то сложно.

darkchaos 18.03.2010 15:31

Цитата:

Сообщение от Bond007 (Сообщение 893935)
Приведите код или важные куски кода, а то как-то сложно.

Код AS3:

private final function addElements(ClassDefinition:Class, strState:String = null):Vector.<BitmapData> {
        var vecStateArray:Vector.<BitmapData> = new Vector.<BitmapData>(),
            i:int = 0,
            j:int,
                iTotalChildren:int,
                matr:Matrix,
                mc:MovieClip = new ClassDefinition(),
                bmd:BitmapData,
                iTotalFrames:int = mc.totalFrames,
                rect:Rectangle = mc.getBounds(mc);
        if (strState) {
                  mc.gotoAndStop(strState);
          }
        for (i = mc.currentFrame; i <= iTotalFrames; i++) {
                mc.gotoAndStop(i);
                if (mc.currentLabel != strState) {
                        break;
                }
                matr = new Matrix();
                matr.tx = -rect.x;
                matr.ty = -rect.y;
 
                bmd = new BitmapData(rect.width, rect.height, true, 0x00000000);
                bmd.draw(mc, matr);
                iTotalChildren = mc.numChildren;
                for(j = 0; j < iTotalChildren; j++) {
                        jumpNextFrame(mc.getChildAt(j), i);
                }
                vecStateArray.push(bmd);
        }
        return vecStateArray;
}
 
private final function jumpNextFrame(doObject:DisplayObject, frame:int):void {
        var mc:MovieClip = doObject as MovieClip;
        if (mc) {
                  var children:int = mc.numChildren;
                  for(var i:int = 0; i < children; i++) {
                        jumpNextFrame(mc.getChildAt(i), frame);
                  }
                  mc.gotoAndStop(frame% mc.totalFrames);
        }
}

В этом коде делается непосредственно копирование, т.е. скриншот, а отрисовка этих битмапов происходит в другом месте

Bond007 18.03.2010 17:07

Как-то мудрено все очень.

Ну в целом вроде все норм. Не понятно почему в функции объявление типа ClassDefinition:Class , так известно, что на входе мувиаклип, ну да ладно.

а как рисуете ?

darkchaos 18.03.2010 17:21

Цитата:

Сообщение от Bond007 (Сообщение 893975)
Как-то мудрено все очень.

Ну в целом вроде все норм. Не понятно почему в функции объявление типа ClassDefinition:Class , так известно, что на входе мувиаклип, ну да ладно.

а как рисуете ?

На входе подается такой параметр, потому что класс берется из swc, заранее известно что он наследован от MovieClip, но какая графика в нем неизвестно. Отрисовка делается каждый тик таймера
Код AS3:

_bmd.copyPixels(bmd, bmd.rect, new Point(x, y), null, null, true);

где _bmd - битмапдата объекта, который лежит на сцене, а bmd получили из описанного выше метода. Повторюсь, что написанный мной код работает, если в мувике нет мувиков с анимацией, а если есть, то картинка не меняется, хотя видно что по тику таймера кадры меняются

Bond007 18.03.2010 17:43

Я что то думал, что вообще не работает.

Видимо анимацию нужно разбить на кадры, а кадры уже переводить в битмапы.


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

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