我想在完成动画时删除并重新添加/“重新启动”Main类。我所有的动画都发生在Main中,并被添加到Main中的显示树中。 Program.as通过添加/删除Main来处理所有这些。我如何在Main.as中运行finishNow()
函数?它一切正常,除了引发错误program.finishNow();
:
TypeError:错误#1009:无法访问空对象引用的属性或方法。
如何重新启动AS类动画
的FLA文件:
挂Program.as。
的Program.as文件:
package {
import flash.display.MovieClip;
public class Program extends MovieClip {
public function Program() {
startNow();
}
function startNow() {
var run:Main = new Main(this);
addChild(run);
}
function finishNow() {
removeChild(run);
var run:Main = new Main(this);
addChild(run);
}
}
}
的Main.as文件:
package {
import flash.display.Sprite;
public class Main extends Sprite
{
var stageHolder:Object;
public var program:Program;
public function Main(stageHolderTemp) {
stageHolder = stageHolderTemp;
trace(stageHolder);
someFunctionsThatDrawGraphics();
}
function callFinishFunction():void {
// how to call finishNow() function from Program.as file here?
program.finishNow();
}
}
}
即使它是全球性的(我复制并粘贴了你的代码),它仍然显示出同样的错误? – ArrayOutOfBounds 2013-03-12 16:16:13
@ArrayOutOfBounds,Vesper的答案正在纠正至少一个问题。在原始代码中,'finishNow()'方法中的'run'变量应该为空。该方法如此之短,很难看出为什么“空对象引用”错误仍然会发生,但对于该方法的其他两行没有意义:)我建议您安装调试Flash Player,错误消息会为您提供问题发生位置的行/帧编号,然后您可以确切确认问题所在。 – 2013-03-12 16:31:26
@ArrayOutOfBounds哦,我认为Vesper和我可能误解了你对错误发生地点的评论。就像我说的,他指出了另一个问题。但是在它到达那里之前,这个错误会在'Main.as'里面的'callFinishFunction()'方法中抛出。那里也出现了同样的问题。 'Main.as'有一个'program'变量,但它永远不会被设置并且为空。程序变量和'stageHolder'变量是多余的。为了修复,保留Vesper的修复,然后删除'stageHolder'并在'Main.as'的构造函数中执行'program = stageHolderTemp'。 – 2013-03-12 16:37:41