有人可以帮我调用Main构造函数吗?一般来说,我的想法是重置场景。
主要课程:
public class Main extends Sprite
{
private var sprite:Sprite = new Sprite();
public function Main()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
sprite.graphics.lineStyle(1, 0x990000, 1);
sprite.graphics.drawRoundRect(5, 5, 500, 150, 10, 10);
addChild(sprite);
}
}
通过使用按钮我删除了该精灵,我的场景变为空白,但我有另一个类:
public class AnotherClass
{
public function Action()
{
ResetMain();
}
private function ResetMain()
{
//what to write here for reseting Main(re-calling Main()) ?
}
}
答案 0 :(得分:0)
我想,如果你真的想,你可以删除文档类并重新实例化它:
//a function in your Main class that resets itself:
public function resetMain()
{
var s:Stage = stage; //need a temporary reference to the stage
parent.removeChild(this); //remove the Main class from the stage
s.addChild(new Main()); //add a new instance of the Main class
}
这是重置程序的一种奇怪方式,我不推荐它。您放弃使用root
关键字来执行此操作。任何未被弱引用或显式删除的事件侦听器也会导致内存泄漏。
最好只编写一个重置所有东西的函数,而不是通过重新实例化文档类(Main class)来重新调用Main构造函数
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
reset();
}
public function reset():void {
//clear out any vars/display objects if they exist already
if(sprite) removeChild(sprite);
//now create those objects again
sprite = new Sprite();
sprite.graphics.lineStyle(1, 0x990000, 1);
sprite.graphics.drawRoundRect(5, 5, 500, 150, 10, 10);
addChild(sprite);
}
从您的评论中,您只需要一种方法从AnotherClass
引用您的主要课程。
有几种方法可以实现这一目标。
创建时传递对AnotherClass的引用。您没有展示如何创建AnotherClass,但您可以更改它的构造函数以接受Main实例的引用:
public class AnotherClass
{
private var main:Main;
public function AnotherClass(main_:Main){
this.main = main_;
}
//....rest of class code
然后,当您实例化AnotherClass时,传入引用:
var another:AnotherClass = new AnotherClass(this); //assuming your in the main class with this line of code
使用root
关键字。
root关键字使你获得对documentClass的引用(我假设Main是)。因此,从显示列表中的任何类,您可以执行以下操作:
Main(root).reset();
对Main实例进行静态引用
使用类本身(不是类的实例)访问静态方法和变量。所以你可以这样做:
public class Main extends Sprite
{
public static var me:Main; //a static var to hold the instance of the main class
public function Main()
{
me = this; //assign the static var to the instance of Main
//.... rest of Main class code
然后您可以在应用程序的任何位置执行此操作:
Main.me.reset();