2014-11-22 93 views
0

我有一個函數sceneLoader,它將使用getDefinitionByName從一個字符串實例化類Scene1的一個對象。然後我想從另一個函數訪問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 
    } 
} 

類場景1

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

的問題是,場景超出範圍。我不能在函數外實例化Scene1,因爲我需要先調用getDefinitionByName。我也想保留稍後加載場景的功能。 如何從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; 
相關問題