Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   вызов методов из загруженной swf (http://www.flasher.ru/forum/showthread.php?t=200453)

warsem 03.06.2013 12:12

вызов методов из загруженной swf
 
Пытаюсь разобраться в этом примере.
Научите заставить видеть главный класс метод setMovie()

Код AS3:

public class Unit extends MovieClip {
        public function Unit(){
                nMovie = 0;
                curMovie = -1;
                curFrame = 0;
                addEventListener(Event.ENTER_FRAME,onEnterFrameFunc);
                stop();
        }
 
        public function setMovie(i:int){
                trace(i);
                nMovie = i;
        }
}

Код AS3:

public class Main extends MovieClip {
 
        public var unit:Object;                //пробовал и так  unit:Unit          import Unit.as
        public var unitReq:URLRequest;
        public var unitLoader:Loader;
 
        unitReq = new URLRequest(host+'/Unit.swf?'+Math.random());
        unitLoader = new Loader();
        unitLoader.load(unitReq);
        unitLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,unitLoaded);
 
 
        public function unitLoaded(e:Event){
                unitLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,unitLoaded);
                unitLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,unitLoadProgress);
                unit = unitLoader.content;
                unit.setMovie(1);
        }


Wolsh 03.06.2013 12:56

http://flasher.ru/forum/showpost.php...4&postcount=10

maincode 03.06.2013 12:57

Что бы была возможность определить unit как unit:Unit, необходимо флешку загрузить в текущем домене.

warsem 03.06.2013 14:38

знакомое слово интерфейс:)
Спасибо. Пороюсь, отпишусь.

Добавлено через 1 час 43 минуты
я на столько криворукий, что не умею копи-пастить?:(
Код AS3:

                        public var unit:UnitInterface;
                        ...
                        trace(unitLoader.content);
                        unit = unitLoader.content as UnitInterface;
                        trace(unit);

Выводит:
[object Unit]
null

maincode 03.06.2013 16:48

Загружайте в текущем(!) домене:
Код AS3:

var loader:Loader = new Loader();
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.load(new URLRequest('...'), context);


KBAC 03.06.2013 17:13

у вас Unit не имплементит UnitInterface, а должен, чтобы после
Код AS3:

unit = unitLoader.content as UnitInterface;

не null было

warsem 03.06.2013 17:45

Цитата:

Сообщение от KBAC (Сообщение 1136251)
у вас Unit не имплементит UnitInterface, а должен, чтобы после не null было

Вот код Unit.as. Поэтому и смущает меня, что нельзя просто написать unit = e.currentTarget.content;

Код AS3:

package as3 {
 
  import flash.display.MovieClip;
  import flash.events.*;
  import as3.UnitInterface;
 
  public class Unit extends MovieClip implements UnitInterface {

p.s.: про домен не понял, гуглю что это такое.

maincode 03.06.2013 18:15

Цитата:

Сообщение от warsem (Сообщение 1136255)
p.s.: про домен не понял, гуглю что это такое.

Читайте здесь

Wolsh 03.06.2013 19:12

Класс Main тоже в пакете as3? Домен интерфейсу не важен, но имя должно совпадать полностью.

warsem 04.06.2013 17:49

Цитата:

Сообщение от Wolsh (Сообщение 1136265)
Класс Main тоже в пакете as3?

все *.as в папке аs3(там и классы и интерфейс)

Цитата:

Сообщение от Wolsh (Сообщение 1136265)
Домен интерфейсу не важен, но имя должно совпадать полностью.

т.е. я где то опечатался и не правильно указал имя интерфейса?


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

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