2014-11-22 5 views
0

getDefinitionByName을 사용하여 문자열에서 Scene1 클래스의 객체를 인스턴스화하는 sceneLoader 함수가 있습니다. 그런 다음 다른 함수에서 Scene1의 함수 (sceneHandler)에 액세스하려고합니다.다른 함수의 클래스 인스턴스 액세스 - getDefinitionByName (AS3)

public class Main extends MovieClip{ 

    private var sceneNumber:int = 1; 
    private var SceneRef:Class; 
    private var sceneString:String; 

    public function Main(){ 
     sceneLoader(); 
     responseHandler(); 
    } 

    private function sceneLoader():void{ 
     sceneString = "Scene" + int(sceneNumber); 
     SceneRef = getDefinitionByName(sceneString) as Class; 
     var scene = new SceneRef(); 
     addChild(scene); 
    } 
    private function responseHandler():void{ 
     scene.sceneHandler(); //Obviously this will not work 
    } 
} 

클래스 장면 l

public class Scene1 extends MovieClip{ 
    public function sceneHandler():void{ 
     //Do something 
    } 
} 

문제는 그 장면이 범위를 벗어나이다. 먼저 getDefinitionByName을 호출해야하므로 함수 외부에서 Scene1을 인스턴스화 할 수 없습니다. 나중에 장면을로드하는 기능을 유지하려고합니다. responseHandler에서 sceneHandler를 호출하려면 어떻게해야합니까?

편집 : 나는

public class Main extends MovieClip{ 

    private var sceneNumber:int = 1; 
    private var SceneRef:Class; 
    private var sceneString:String; 

    public function Main(){ 
     sceneLoader(); 
     responseHandler(); 
    } 

    private function sceneLoader():void{ 
     addChild(getScene());//Does not work 
    } 

    private function responseHandler():void{ 
     getScene().sceneHandler(); //Works now 
    } 

    private function getScene():Object{ 
     sceneString = "Scene" + int(sceneNumber); 
     SceneRef = getDefinitionByName(sceneString) as Class; 
     var scene = new SceneRef(); 
     //addChild(getScene());//This does work but doesn't suit my need 
     return scene; 
    } 
} 

가 지금은 무대에 개체를 추가 할 수 없습니다 시도했습니다. 오류가 발생합니다 :

Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:DisplayObject.

답변

0

알아 냈습니다. 방금 DisplayObject로 캐스팅하는 것을 잊었습니다. 분명히

public class Main extends MovieClip{ 

    private var sceneNumber:int = 1; 
    private var SceneRef:Class; 
    private var sceneString:String; 

    public function Main(){ 
     sceneLoader(); 
     responseHandler(); 
    } 

    private function sceneLoader():void{ 
     addChild(getScene() as DisplayObject); 
    } 

    private function responseHandler():void{ 
     getScene().sceneHandler(); 
    } 

    private function getScene():Object{ 
     sceneString = "Scene" + int(sceneNumber); 
     SceneRef = getDefinitionByName(sceneString) as Class; 
     var scene = new SceneRef(); 
     return scene; 
    } 
} 

:

import flash.display.DisplayObject; 
관련 문제