Вызывающая функция во время выполнения загруженного SWF

Использование AS3 / Flash CS4

Хорошо, спасибо всем, кто читает это. Моя проблема, в частности, я проектирую пользовательский интерфейс с элементами управления на нем. 5 кнопок поворота влево, поворота вправо, увеличения, уменьшения и автоповорота. Интерфейс сам по себе работает нормально, я могу отслеживать нажатия кнопок, переключать кнопки автоповорота и т.д...

Моя программа читает XML-файл. Загружает некоторые изображения, заполняет массив ссылками для каждого изображения, и при нажатии на изображение загрузчик загружает SWF-файл из URL-адреса и отображает его на экране. Нет проблем.

Теперь у меня изначально был пользовательский интерфейс управления масштабированием в библиотеке runtime_loaded.fla и слушатели мыши в том же классе связанных документов. Интерфейс работает с movieClip в runtime_loaded.swf, когда он находится в том же коде.

Теперь, чтобы попрактиковаться в хорошем кодировании, я решил удалить пользовательский интерфейс из runtime_loaded.fla и добавить его в Main.fla. Это важно, потому что main будет обрабатывать 100 возможных изображений / объектов, каждый из которых имеет свой собственный уникальный swf для ссылки. Если я решу изменить внешний вид интерфейса, но оставить вызовы функций одинаковыми, я могу, по сути, добавить столько, сколько я хочу, в main.fla вместо runtime_loaded.fla, который я должен сделать для каждого отдельного объекта.,

ФАЙЛОВАЯ СТРУКТУРА

Main.fla <- interface in the library. 5 mouse event functions. Inside each function calls
           a property of loaded_swf (loaded_swf.rotateLeft, loaded_swf.rotateRight) etc...
Runtime_loaded.fla <- links specificObject.as in properties (AS3/CS4)
specificObject.as <- has 5 public static functions{ rotateRight, rotateLeft, zoomIn, zoomOut, toggleAutoRotate }

КОД

    //showFlashBox
function showFlashBox(temp_string:String):void {
 if(!flash_box_on){
 var temp_top:uint = numChildren;
 addChildAt(FlashBoxContainer,temp_top);
 newXButton.addEventListener(MouseEvent.CLICK,  flashBoxXClick);

1. addChild(new_loader); 
2. var url:URLRequest = new URLRequest(temp_string);
 new_loader.x = 0;
 new_loader.y = 0;
 new_loader.load(url);
3. new_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, gotSwf);

 flash_box_on = true;
 }
 }

 function gotSwf(e:Event){
4.  //loaded_swf = e.target.content;
  trace(e.target.content);
5.   new_zoom_controls.button_minus.addEventListener(MouseEvent.CLICK, zoomOutFunction);
   new_zoom_controls.button_plus.addEventListener(MouseEvent.CLICK, zoomInFunction);
   new_zoom_controls.button_left.addEventListener(MouseEvent.CLICK, rotateLeftFunction);
   new_zoom_controls.button_right.addEventListener(MouseEvent.CLICK, rotateRightFunction);
   new_zoom_controls.button_rotate.addEventListener(MouseEvent.CLICK, toggleRotateFunction);
   function rotateRightFunction(e:MouseEvent){
6.    //loaded_swf.rotateRight();
   }
   function rotateLeftFunction(e:MouseEvent){
    //loaded_swf.rotateLeft();
   }
   function zoomInFunction(e:MouseEvent){
    //loaded_swf.zoomIn();
   }
   function zoomOutFunction(e:MouseEvent){
    //loaded_swf.zoomOut();
   }
   function toggleRotateFunction(e:MouseEvent){
    //loaded_swf.toggleAutoRotate();
    if(new_zoom_controls.button_rotate.currentFrame == 1){
     new_zoom_controls.button_rotate.gotoAndStop(2);
    }
    else new_zoom_controls.button_rotate.gotoAndStop(1);
   }
   new_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, gotSwf);
 }

Если вы выполните шаги 1–6, вы увидите мои шаги по загрузке.swf, прослушивателей событий мыши и обработчиков щелчков, а затем вызов объекта var loaded_swf:Object;

    public static function rotateLeft():void
  {
    object.yaw(animation_turning_speed);
  }

  public static function rotateRight():void
  {
    object.yaw(-animation_turning_speed);
  }

если я запускаю main.fla и пытаюсь нажимать кнопки. Бывает.

ReferenceError: Ошибка № 1069: свойство rotateRight не найдено в ThreedsKU39web и значение по умолчанию отсутствует. at MethodInfo-82() ReferenceError: Ошибка #1069: свойство rotateLeft не найдено в ThreedsKU39web и значение по умолчанию отсутствует. в MethodInfo-83()

1 ответ

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

Ответ был в функции загруженного во время выполнения класса SWF.

public static function rotateRight():void
{
    object.yaw(-animation_turning_speed);
}

Оказывается, это должна быть только публичная функция вместо публичной статики. В основном из-за человеческой ошибки, так как после того, как файл работал, я попытался скопировать код во все остальные мои объектные файлы, и каким-то образом статика вернулась туда и испортила его. Так что для дальнейшего использования при загрузке во внешний SWF, публичная функция должна сделать свое дело. * Обратите внимание, что многие из моих переменных возвращали ошибки, пока не были объявлены как общедоступные статические.

Другие вопросы по тегам