AS3 кросс-сценарий между 2 SWFs проблема - PullRequest
0 голосов
/ 14 августа 2010

У меня есть фильм с классом документов (Main.as), который загружает 2 SWF:

private var mainContainer:Sprite = new Sprite();
addChild(mainContainer);

var loaderx:Loader = new Loader();
loaderx.contentLoaderInfo.addEventListener(Event.COMPLETE,loadingComplete);

loaderx.load(new URLRequest("PhotoLoader.swf")); // PhotoLoader.as


var viewer:Loader = new Loader();
viewer.contentLoaderInfo.addEventListener(Event.COMPLETE,loadingComplete);

viewer.load(new URLRequest("PhotoViewer.swf")); // PhotoViewer.as

private function loadingComplete(evt:Event):void {
  evt.target.removeEventListener(Event.COMPLETE,loadingComplete);
  mainContainer.addChild(evt.target.content);
}

Теперь мне нужно получить доступ к некоторым объектам var / PhotoLoader из PhotoViewer, но каждый раз, когда я компилирую PhotoViewer, компилятор жалуется:

trace(root.loaderx.dbFields);
1119: Access of possibly undefined property loaderx through a reference with \
static type flash.display:DisplayObject.

Обратите внимание, что мне нужно соединение между двумя загруженными SWF, а не из фильма, который их загрузил

1 Ответ

0 голосов
/ 14 августа 2010

EDIT

Я удивлен, что приведение типов в виде мувиклипа не удается, но опять же у меня есть только код, который вы здесь видите, чтобы пройти.В соответствии с сообщением об ошибке вы можете сделать это тогда:

var photoLoader:PhotoLoader = PhotoLoader(evt.target.content );

или даже

evt.target.content as PhotoLoader

, что даже лучше, чем приведение к роли MovieClip, поскольку вы можете напрямую получить доступ к свойствам и методамкласс PhotoLoader!

Я не уверен, какова ваша среда, и вы правы, я предположил, что вы хотели получить доступ к классам из класса Main.Явно моя ошибка!Если у вас есть DocumentClasses для каждого SWF, то это делается для того, чтобы ваш код структурировался, вам не нужно событие LocalConnection, у вас может быть класс Singleton, который будет использоваться в качестве FrontController, центральный доступ к свойствам обоих классов.

КОНЕЦ РЕДАКТИРОВАНИЯ

Сначала вы можете преобразовать содержимое вашего загрузчика в MovieClip, например:

var content:MovieClip = MovieClip(evt.target.content);
mainContainer.addChild(content);

evt.target.content должен быть из типа DisplayObject, поэтому выневозможно получить доступ к свойствам ваших видеоклипов.

Если вам нужен доступ к свойствам загруженного SWF-файла, вы должны объявить их следующим образом:

private var photoViewer:MovieClip;
private var photoLoader:MovieClip;

, тогда вы можете сделать:

photoViewer = MovieClip(evt.target.content);
mainContainer.addChild(photoViewer);

photoLoader = MovieClip(evt.target.content);
mainContainer.addChild(photoViewer);

просто дайте имя своему загрузчику, чтобы дифференцировать MovieClips

loaderx.name = "photoLoader";
viewer.name = "photoViewer";

, тогда вы можете сделать это

private function loadingComplete(evt:Event):void 
{
    switch(event.currentTarget.loader.name)
   {
        case "photoLoader":
          photoLoader = MovieClip(evt.target.content);
          mainContainer.addChild(photoLoader);
          break;

        case "photoViewer":
          photoViewer = MovieClip(evt.target.content);
          mainContainer.addChild(photoViewer);
          break;
   }

  if( photoViewer!= null && photoLoader!= null )
       evt.target.removeEventListener(Event.COMPLETE,loadingComplete);
}

После этого вы сможете получить доступ к вашемуСвойства MovieClips как это

trace( photoLoader.dbFields );

или

var prop:Object = photoViewer.whateverNameYouGaveToYourProperty;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...