从另一个函数访问类实例 - getDefinitionByName(AS3)
问题描述:
我有一个函数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.
答
我想通了。我忘了把它当作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;