开发者

calling function in a runtime loaded swf

开发者 https://www.devze.com 2023-01-30 06:26 出处:网络
Using AS3 / Flash CS4 Alright thanks to everyone who is reading this. My problem specifically I am designing a user interface with controls on it. 5 buttons rotate left, rotate right, zoom in, zoom o

Using AS3 / Flash CS4

Alright thanks to everyone who is reading this. My problem specifically I am designing a user interface with controls on it. 5 buttons rotate left, rotate right, zoom in, zoom out, and auto rotate. The interface in itself works fine, I can trace out button clicks, toggle the auto rotate button etc...

My program reads an xml file. Loads some images, fills an array with links for each image, and when the image is clicked a loader loads a swf from a URL and displays it on screen. No problem.

Now I originally had the zoom controls user interface in the runtime_loaded.fla library, and the mouse listeners in the same linked document class. The interface works with the movieClip in runtime_loaded.swf when it is in the same code.

Now to practice good coding, I decided to remove the UI from the runtime_loaded.fla and add it to the Main.fla. This is essential because the main is going to handle possible 100's of images/objects that each have their own unique swf to link too. If I decide to change out the look of the interface but leave the function calls the same, I could 开发者_如何学Cessentially put in as many as I want into the main.fla instead of the runtime_loaded.fla which I would have to do for every single object.

THE FILE STRUCTURE

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 }

THE CODE

    //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);
 }

If you follow steps 1-6 you see my steps of loading the .swf, mouse event listeners and click handlers, then the object call of the var loaded_swf:Object;

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

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

if I run the main.fla and try to click the buttons. This happens.

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()


I actually stumbled upon the answer before I finished submitting this as I went through the code to copy it. But after spending a few hours of frustrating moments on this last night, I will post it to ensure the next guy doesn't meet the same demise.

The answer was in the function of the runtime-loaded swf class.

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

It turns out it only needs to be public function instead of public static. Mainly human error as after the file was working, I attempted to copy the code over to all my other object files, and somehow static got back in there and messed it up. So for future reference when loading in the external swf, public function should do the trick. *Note that many of my variables were returning errors until being declared as public static though.

0

精彩评论

暂无评论...
验证码 换一张
取 消