[英]Access class instance from another function - getDefinitionByName(AS3)
I have a function, sceneLoader, that will instantiate an object of the Class Scene1 from a string using getDefinitionByName. 我有一个SceneLoader函数,它将使用getDefinitionByName从字符串实例化Scene1类的对象。 I then want to access a function (sceneHandler) in Scene1, from another function. 然后,我想从另一个函数访问Scene1中的一个函数(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{
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
}
}
Class Scene1 类场景1
public class Scene1 extends MovieClip{
public function sceneHandler():void{
//Do something
}
}
The problem is that scene is out of scope. 问题在于场景超出范围。 I cannot instantiate Scene1 outside the function as I need to first call getDefinitionByName. 我无法在函数外部实例化Scene1,因为我需要先调用getDefinitionByName。 I also want to keep the function for loading scenes later on. 我也想保留以后加载场景的功能。 How can I call sceneHandler from responseHandler? 如何从responseHandler调用sceneHandler?
EDIT: I've tried 编辑:我试过了
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;
}
}
Now I can't add the object to the stage. 现在,我无法将对象添加到舞台上。 I get the Error: 我得到错误:
Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:DisplayObject. 将静态类型为Object的值隐式强制为可能不相关的类型flash.display:DisplayObject。
I figured it out. 我想到了。 I just forgot to cast as a 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;
}
}
Obviously: 明显:
import flash.display.DisplayObject;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.