Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MovieClip в BitmapData (http://www.flasher.ru/forum/showthread.php?t=114054)

Venya2007 17.07.2008 13:19

MovieClip в BitmapData
 
Здравствуйте! Требуется ваша помощь:
Есть у меня Анимация в swf файле, я хочу переобразовать кадр с MovieClip в Bitmap и вывести на экран!Вот как я это делаю:
Код:

package
{
        import flash.display.*;
        import flash.text.*;
       
        public class embSWF extends Sprite
        {
                [Embed(source="robik.swf")]
                public var img:Class;
               
                private var _bitmapData:BitmapData;
                private var _bitmap:Bitmap;
                private var z:MovieClip;
                public function embSWF()
                {
                        _bitmapData= new BitmapData(250,250,true,0x00FF00);
                        z=new img();
                        z.cacheAsBitmap= true;
                        _bitmapData.draw(z);
                        _bitmap=new Bitmap(_bitmapData);
                        addChild(_bitmap);
                       
                        var titleFormat:TextFormat = new TextFormat();
            titleFormat.font = "Verdana";
                        titleFormat.bold = true;
            titleFormat.color = 0xFF0000;
            titleFormat.size = 10;
                        var title:TextField = new TextField();
                        title.text = "Presents";
                        title.x = 10;
                        title.y = 5;
                        title.autoSize = TextFieldAutoSize.LEFT;
                        title.selectable = false;
                        title.setTextFormat(titleFormat);
                        addChild(title);
                }
                public function gotoFrame(num:uint):void{
                //removeChild(_bitmap);
                //_bitmap=null;
                _bitmapData.draw(z);
                _bitmap=new Bitmap(_bitmapData);
                addChild(_bitmap);
                }

        }
}

Но на экран ничего не выводится :(

EugeneLitvinov 17.07.2008 20:27

Клип img аттачится из библиотеки? Если да, сделай ему Linkage Class "img" и убери строчку
Код:

public var img:Class;

BlooDHounD 17.07.2008 20:56

EugeneLitvinov, кажется строчка
Код:

[Embed(source="robik.swf")]
даёт понять, что клип не лежит в библиотеке.

undefined 18.07.2008 02:07

где-то на форуме было обсжудение, суть такая что методу draw вторым аргументом надо обязательно передавать обьект типа Matrix и 5-ым обьект типа Rectangle, т.е.
Код:

_bitmapData.draw(z, new flash.geom.Matrix(), null, "normal", new flash.geom.Rectangle(0,0,z._width,z._height));
не пробовал в as3, но в as2 без этих аргументов выходит лажа.

wvxvw 18.07.2008 02:22

Ну, сразу 2 вопроса: а почему 250, 250, true, 0x00FF00. Т.е. битмапдата будет прозрачная (тяжело заметить клип с альфой == 0 ;) )
И что будет если просто z добавить на сцену?
И, млин, зачем называть классы с маленькой буквы?

Venya2007 18.07.2008 11:51

Цитата:

Сообщение от wvxvw (Сообщение 752828)
Ну, сразу 2 вопроса: а почему 250, 250, true, 0x00FF00. Т.е. битмапдата будет прозрачная (тяжело заметить клип с альфой == 0 ;) )
И что будет если просто z добавить на сцену?
И, млин, зачем называть классы с маленькой буквы?

Не бтмап дата прозрачная,а фон битмапы прозрачный!

Когда гружу какую то картинку, работает, а когда swf- работать не хочет:(! Может у кого - то возникали такие проблемы?

wvxvw 18.07.2008 12:40

Ну, это если с двух раз не дошло, то с третего наверняка? =)
Да, так если битмапдата будет непрозрачная - то можно будет увидеть приаттачилась ли битмапдата (откуда ж мне знать, где именно ошибка?).
И что со вторым вопросом? Что будет, если просто приаттачить z а не созданый из него битмап (может путь к сорсам неправильно указан, или первый кадр в swf пустой).

Venya2007 18.07.2008 13:20

wvxvw спасибо что отозвались, может вы поможете разобратся:)!
Ну, это если с двух раз не дошло, то с третего наверняка? =)
Да это нет у меня заглючил:)

Да, так если битмапдата будет непрозрачная - то можно будет увидеть приаттачилась ли битмапдата (откуда ж мне знать, где именно ошибка?).
И что со вторым вопросом? Что будет, если просто приаттачить z а не созданый из него битмап (может путь к сорсам неправильно указан, или первый кадр в swf пустой).

Ставил непрозрачной, рисуется сплошной квадрат. Пути все верны, иначе Флекс ругается!Пробовал просто z аттачить- ничего не помогло:(!Но когда гружу обычную картинку - все работает! Может я неправильно аттачу саму swf?Как правльно?

wvxvw 18.07.2008 13:49

Ну, вариант, в 250х250 верхнем левом углу загруженой флешки ничего нет / Графики вообще на сцене нет. А можно саму swf посмотреть, у меня аналогичный код работает просто.

vooparker 18.07.2008 14:01

2Venya2007:
Соль в реализации embed, когда вы ключается swf таким образом, то происходит примерно следующее: swf включается в виде byteArray, после чего загружается через Loader методом loadBytes. Следовательно на момент создания экземляра img он еще не загрузился, это происходит несколькими мгновениями позже.

Ваш img в случае если речь идет о включении swf является наследником mx.core.MovieClipLoaderAsset (проверить это легко trace(getQualifiedSuperclassName(z)); ), у которого есть событие complete, полагаю если подписаться сразу после вызова конструктора на это событие и в обработчике срисовать в bitmapData, то все должно заработать.

Если же нет, можно попробывать самому сделать все работу которую делает MovieClipLoaderAsset, то есть включить swf в виде byteArray и самому загрузить его через loadBytes, с подпиской на соответсвующие события. Здесь есть простой пример как это сделать - http://yarovoy.com/2007/10/27/embed_binary_data/


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

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