Очень странно: флэш-ошибки, если я хочу получить доступ к свойству в загруженном SWF - PullRequest
0 голосов
/ 11 апреля 2011

Обновление:

Я пытаюсь получить доступ к (MySWF (movieClip)). Id, но получаю странное сообщение об ошибке:

1120: доступ к неопределенному свойству aslider

, который определен в MySWF.init. Если я удаляю (MySWF (movieClip)). Id программа работает отлично!

Разве это не странно, особенно когда я добавил addEventListener (Event.ADDED_TO_STAGE, init); в конструкторе MySWF, чтобы убедиться, что ползунок находится на сцене.

В основном:

  private var idMySWF:int;
  public function loadMySWF(event:MouseEvent) {

  idMySWF = 1;
  var myLoader:Loader = new Loader();
  myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
  myLoader.load(new URLRequest("MySWF.swf"));           
  myZone.addChild(myLoader);

  }       

  public function loadComplete(evt:Event):void {

  var movieClip:MovieClip;
  var myLoader:Loader;
  myLoader = evt.currentTarget.loader as Loader;

  movieClip = MovieClip(loader.content);
  myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);
  myLoader = null
  movieClip.addEventListener(CustomEvent.ON_CUSTOM_EVENT,OnCustomEvent);      
  (MySWF(movieClip)).id = idMySWF;

  }

В MySWF:

  private var _id:int;

  public function get id():int {
      return _id;
  }

  public function set id(__id:int):void {
      _id = __id;
  }

  public function MySWF() { 

    addEventListener(Event.ADDED_TO_STAGE, init);   

  }
  public function init( e:Event ):void {

    removeEventListener( Event.ADDED_TO_STAGE, init );      
    aslider.addEventListener(SliderEvent.CHANGE,OnSliderEventChange);

  }

Ответы [ 3 ]

1 голос
/ 11 апреля 2011

Строка myZone.addChild(loader); должна быть myZone.addChild(myLoader); Я думаю, и я бы поставил ее до myLoader.load(new URLRequest("MySWF.swf")); на случай, если загрузка слишком быстрая!

1 голос
/ 11 апреля 2011

*** ОБНОВЛЕНИЕ *** Ладно, я был не совсем прав в исходном (ниже) ответе.Посмотрев непосредственно на FLA, выясняется, что проблема заключается в использовании класса документа в сочетании с предварительно определенными экземплярами объектов, размещенных на сцене во время разработки.Происходит следующее: flash автоматически генерирует / объявляет ссылки на эти экземпляры во время выполнения, поэтому единственный способ действительно получить к ним доступ напрямую через класс документа - ссылаться на них следующим образом:

var myObject: Slider = this ["sliderNameInFlashIDE"];

Вот полная статья об этой проблеме и альтернативном обходном пути, требующем отключения этой функции автоматического объявления в IDE.

http://blog.ickydime.com/2008/07/as3-notes-automatically-declare-stage.html

Таким образом, в основном, насколько это применимо к вашему коду:

 public function OnCustomEvent(event:CustomEvent): void {

       this[\"labelValue\"].text = event.value + \"\";
       var cEvent: CustomEvent;
       cEvent = new CustomEvent(CustomEvent.ON_CUSTOM_EVENT);
       cEvent.value = event.value;
       this.dispatchEvent(cEvent);

 }

и

 public function init( e:Event ):void {

   removeEventListener( Event.ADDED_TO_STAGE, init );

   this.addEventListener(CustomEvent.ON_CUSTOM_EVENT,OnCustomEvent);
   this[\"aslider\"].addEventListener(SliderEvent.CHANGE,OnSliderChange);

 }

Решите проблему наличия нулевых ссылок на объекты.

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

*** ОРИГИНАЛЬНЫЙ ОТВЕТ *** Вы получаете доступ к неопределенной ошибке, потому что ссылка на объект существует раньше, чем объект.Объект создается при создании списка отображения для родителя.Вам необходимо добавить прослушиватель событий для Event.ADDED_TO_STAGE в конструктор MySWF и добавить этот прослушиватель событий (SliderEvent) внутри обратного вызова в ADDED_TO_STAGE.

http://www.emanueleferonato.com/2009/12/03/understand-added_to_stage-event/

http://forums.adobe.com/message/3464172 (В частности, пост Рэнди):

"Экранный объект" в основном "готов при попадании в код конструктора. Но бывают моменты, когда безопаснее добавить прослушиватель событий для" Added to Stage "и в обработчике все будет инициализировано. Например, я обнаружил, что лучше получить Flash Vars из loaderInfo после запуска этого события. "

0 голосов
/ 11 апреля 2011

Начнем с того, что ваша строка:

idMySWF: 1;

Не делает то, что, я думаю, вы ожидаете, попробуйте вместо этого использовать знак равенства:

idMySWF = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...