Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Доступ к свойствам и методам из отладочной флешки (http://www.flasher.ru/forum/showthread.php?t=167313)

djserge 09.09.2011 17:23

Доступ к свойствам и методам из отладочной флешки
 
Привет всем. Помогите решить такую задачу. Есть три флешки: preloader.swf, loader.swf, hello.swf.
Loader.swf подгружает главный и единственный класс из hello.swf. Как из отладочной флешки preloader.swf получить доступ к свойствам и методам двух других флешок?

Пробовал вместо этого кода
Код AS3:

Hello = loaderInfo.applicationDomain.getDefinition('Hello') as Class;
LoaderHello = loaderInfo.applicationDomain.getDefinition('LoaderHello') as Class;

такой способ
Код AS3:

Hello = getDefinitionByName('Hello') as Class;
LoaderHello = getDefinitionByName('LoaderHello') as Class;

ничего не получается.

В flashlog.txt пишутся сообщения об ошибках:
Код:

<Error> Error #1065: Переменная Hello не определена.
<Error> Error #1065: Переменная LoaderHello не определена.
Ok loaded: file://localhost/C:/Documents and Settings/Admin/%D0%9C%D0%BE%D0%B8 %D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B/Hello/Hello.swf
Предупреждение: SWF-файл ActionScript 1.0/2.0 загрузил SWF-файл ActionScript 3.0; код в SWF-файле ActionScript 3.0 выполняться не будет.
Предупреждение: SWF-файл ActionScript 1.0/2.0 загрузил SWF-файл ActionScript 3.0; код в SWF-файле ActionScript 3.0 выполняться не будет.

Ниже привожу их исходный код

Hello.swf
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.*;
 
        public class Hello extends Sprite
        {
                public const stroka:String = "HELLO";
 
                public function Hello():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        //helloworld();
                }
                private var txt:TextField;
                public function helloworld():void {
                        var format:TextFormat = new TextFormat();
                        format.size = 37;
                        txt = new TextField();
                        txt.y = 180;
                        txt.text="Hello world!!!"
                        txt.setTextFormat(format);
                        txt.autoSize = TextFieldAutoSize.LEFT;
                        addChild(txt);
                }
        }
}

Loader.swf
Код AS3:

package {
 import flash.display.Sprite;
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.net.URLRequest;
 import flash.events.*;
 
 public class LoaderHello extends Sprite {
 
        public const text:String = "WORLD";
 
 public function LoaderHello() {
 
 var loader:Loader = new Loader();
 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
 loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 loader.load(new URLRequest("Hello.swf"));
 }
 
 private function completeHandler(event:Event):void {
 
 var info:LoaderInfo = event.target as LoaderInfo;
 trace("Ok loaded: " + info.url);
 try {
 var a:Class = info.applicationDomain.getDefinition("Hello") as Class;
 addChild( new a() );
 } catch (e:ReferenceError) {
 trace('ERROR: '+e);
 }
 }
 
 private function ioErrorHandler(event:IOErrorEvent):void {
 trace("ERROR: " + event);
 }
 }
 }

Preloader.swf
Код AS3:

package
{
 
        import flash.display.LoaderInfo;
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.events.Event;
        import flash.utils.*;
        import flash.display.DisplayObject;
 
        public class Preloader extends Sprite
        {
                //Ссылка на самих себя
                protected static var self:Sprite;
                //Ссылка на объект который будет загружен в профайлер
                protected static var targetSprite:Sprite;
                //Ссылка на объект stage загруженного объекта
                protected static var targetStage:Stage;
 
                public function Preloader():void
                {
                        if (stage) initHandler(null);
                        else addEventListener(Event.ADDED_TO_STAGE,this.initHandler);
                }
 
                private function initHandler(event:Event):void
                {
                        if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE,initHandler);
 
                        self = this;
                        root.addEventListener("allComplete",allCompleteHandler);
                }
 
                private function allCompleteHandler(event:Event):void
                {
                        var loaderInfo:LoaderInfo;
 
                        try
                        {
                                loaderInfo = LoaderInfo(event.target);
 
                                if (loaderInfo.content.root.stage == null) return;
 
                                //Извлекаем ссылку на загруженный объект
                                targetSprite = loaderInfo.content.root as Sprite;
                                targetStage = targetSprite.stage;
                                targetStage.frameRate = 30;
 
                                beginHarassment();
                        }
                        catch(e:Error)
                        {
                        trace("<Error> " + e.message);       
                        }
                }
 
                private var Hello:Class;
                      private var LoaderHello:Class;
                private function beginHarassment():void {
                        try {
                                targetSprite = loaderInfo.content.root as Sprite;
 
                                Hello = loaderInfo.applicationDomain.getDefinition('Hello') as Class;
                                            LoaderHello = loaderInfo.applicationDomain.getDefinition('LoaderHello') as Class;
 
                                var stringHello:Object = new Hello();
 
                                var stringLoaderHello:Object = new LoaderHello();
                                stringHello.helloworld();
                                trace("TEXT"+stringHello.stroka);
                                            trace("STROKA"+stringLoaderHello.text);
 
                        }
                        catch (e:Error) {
                                var self:Preloader = this;
                                trace("<Error> " + e.message);
                                            setTimeout(function():void { self.beginHarassment(); }, 1000);
                        }
                }
        }
}


toFL 09.09.2011 17:47

Цитата:

Переменная Hello не определена.
Код AS3:

var Hello:Class = ...

Цитата:

Предупреждение: SWF-файл ActionScript 1.0/2.0 загрузил SWF-файл ActionScript 3.0; код в SWF-файле ActionScript 3.0 выполняться не будет.
Сделайте все swf-ки на AS3

djserge 09.09.2011 18:57

Сделал заново все проекты в AS3, скомпилировал, в flashlog.txt опять ошибки:

Код:

Предупреждение: SWF-файл ActionScript 1.0/2.0 загрузил SWF-файл ActionScript 3.0; код в SWF-файле ActionScript 3.0 выполняться не будет.
Предупреждение: SWF-файл ActionScript 1.0/2.0 загрузил SWF-файл ActionScript 3.0; код в SWF-файле ActionScript 3.0 выполняться не будет.


toFL 09.09.2011 19:53

Увы, значит скомпилировали не все SWF в AS3. Чудес не бывает.


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

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