Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Embed SWF-ки и обращение к её методам (http://www.flasher.ru/forum/showthread.php?t=114452)

Aldvin 29.07.2008 18:11

Embed SWF-ки и обращение к её методам
 
Приветствую.
Имеется Flash AS3 SWF файлик(1) имплементирующий некий интерфейс ICalc.
Из флекса(2), компонентом SWFLoader я подгружаю этот файлик(1), затем через интерфейс обращаюсь к методам SWFки(1). Всё работает.
Код:

var myInstance:ICalc = swfLoader.content as ICalc;
myInstance.anyFunction(var1, var2);

Но стоит заEMBEDить SWF-ку myInstance становится Null (myInstance инициализирую после отображения на сцене SWFки(1)), и обратиться к методам уже не получается.

Пробовал Embedить через Bindable объект с последующим указанием source:
Код:

[Bindable]
[Embed('flashContainer.swf')]
private static var FLASH_CONTAINER:Class;
...
swfLoader.source=FLASH_CONTAINER;

Подскажите как решить мою проблему. Мне необходим 1 конечный swf файл содержащий в себе всё необходимое.

Venya2007 29.07.2008 18:39

Код:

package
{
        import flash.display.*;
        import flash.events.Event;
        import flash.utils.ByteArray;
       
        public class ObjectSWF extends Sprite{
               
                private var loader:Loader;
                private var byte:ByteArray;
                private var thisObj:MovieClip;
                private var _scale:Number;
       
                public function ObjectSWF(Obj:Class,scale:Number=1){
                        loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadBytes);
                        byte = new Obj() as ByteArray;
                        loader.loadBytes(byte);       
                        _scale= scale;
                }
        //-------------------------------------------------------------------------------------
                private function onLoadBytes(evt:Event):void{                       
                        this.thisObj = loader.content as MovieClip;
                        this.gotoFrameStop(1)
                       
                        this.thisObj.scaleX= _scale;
                        this.thisObj.scaleY= _scale;
                        this.thisObj.x=-Math.round(this.thisObj.width/2);
                        this.thisObj.y=-Math.round(this.thisObj.height/2);
                        addChild(this.thisObj);
                }       
        //-----------------------------------------------------------------------------------------
            public function gotoFrameStop(num:uint):void{
                    this.thisObj.gotoAndStop(num)
            }
        //-------------------------------------------------------------------------------------------
                public function gotoFramePlay(num:uint):void{
                        this.thisObj.gotoAndPlay(num);
                }
        //-------------------------------------------------------------------------------------------       
                public function nextFrame():void{
                        this.thisObj.nextFrame();
                }
        //------------------------------------------------------------------------------------------       
                public function prevFrame():void{
                        this.thisObj.prevFrame();
                }
        //-----------------------------------------------------------------------------------------
                public function RemoveObjectSWF():void{
                        removeChild(this.thisObj);
                }       
        }
}

Далее
Код:

....
[Embed('flashContainer.swf')]
private static var FLASH_CONTAINER:Class;
var n_swf:ObjectSWF= new ObjectSWF(FLASH_CONTAINER)


Aldvin 30.07.2008 08:49

Спасибо за вариант, но ситуация аналогичная. В классе ObjectSWF при присвоении переменная byte, оказывается Null, хотя Obj() не пустой.
Код:

byte = new Obj() as ByteArray;
loader.loadBytes(byte);

http://showroom.kgunited.com/powerpo...lator/hint.gif
Пробовал также грузить другой SWF файлик - не помогает.
Подскажите пожалуста у кого ещё есть идеи.

Venya2007 30.07.2008 11:28

Проверте правильность пути и название флешки

Aldvin 30.07.2008 13:14

Флешка Embedится - 100%. Лежит рядом так что ошибок с путём быть не может.
Проблема осталась не решенной, пришлось её обойти и реализовать структуру программы иным способом.
Venya2007, спасибо за участие и за помощь!

Molecula 30.07.2008 18:19

http://yarovoy.com/2007/10/27/embed_binary_data/ - может поможет.

Venya2007 03.08.2008 21:51

Aldvin Molecula правильно подсказал:попробуйте - 100 % будет работать!

Код:

[Embed('flashContainer.swf',mimeType="application/octet-stream")]
private var FLASH_CONTAINER:Class;
var n_swf:ObjectSWF= new ObjectSWF(FLASH_CONTAINER)



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

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