2010-12-11 3 views
0

AS3/Flash CS4 사용런타임에 호출 함수가로드 됨 SWF

이 책을 읽은 모든 사람에게 감사드립니다. 내 문제는 구체적으로 그것에 컨트롤이있는 사용자 인터페이스를 설계하고있다. 5 버튼은 왼쪽으로 회전하고, 오른쪽으로 회전하고, 확대하고, 축소하고, 자동 회전합니다. 인터페이스 자체가 잘 작동하고 버튼 클릭 수를 추적하고 자동 회전 버튼을 전환 할 수 있습니다.

내 프로그램에서 xml 파일을 읽습니다. 일부 이미지를로드하고 배열에 각 이미지의 링크를 채우며 이미지를 클릭하면 로더가 URL에서 swf를로드하여 화면에 표시합니다. 문제 없어.

이제는 원래 런타임 컨트롤 사용자 인터페이스가 runtime_loaded.fla 라이브러리에 있고 마우스 수신기가 동일한 링크 된 문서 클래스에있었습니다. 이 인터페이스는 동일한 코드에있을 때 runtime_loaded.swf의 movieClip과 함께 작동합니다.

좋은 코딩을 연습하기 위해 runtime_loaded.fla에서 UI를 제거하고 Main.fla에 추가하기로 결정했습니다. 메인은 각각 고유 한 swf가있는 이미지/오브젝트의 가능한 100을 처리하기 때문에 필수적입니다. 인터페이스의 모양을 바꾸지 만 함수 호출을 그대로두면 모든 단일 객체에 대해 수행해야 할 runtime_loaded.fla 대신 main.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); 
} 

당신이 .SWF, 마우스 이벤트 리스너를로드의 제 단계를 참조하고 핸들러를 클릭 1-6 단계를 수행하면 , 다음 var의 객체 호출 load_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으로 선언되기 전까지는 에러를 반환했다.

관련 문제