2014-11-22 97 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; 
相关问题