2010-12-11 2 views
0

Использование AS3/Flash CS4вызов функции во время работы загружен swf

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

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

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

Теперь, чтобы попрактиковаться в хорошем кодировании, я решил удалить пользовательский интерфейс из runtime_loaded.fla и добавить его в Main.fla. Это важно, потому что основное устройство будет обрабатывать возможные 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: Error #1069: Property rotateRight not found on ThreedsKU39web and there is no default value. at MethodInfo-82() ReferenceError: Error #1069: Property rotateLeft not found on ThreedsKU39web and there is no default value. at MethodInfo-83()

ответ

0

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

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

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

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

Смежные вопросы