(我在 AS3 和 Adobe AIR for iOS SDK 中工作)。
该程序有两个类:第一个是Program.as
FLA 文件链接到的类。其中Program.as
有一个启动程序的功能和另一个重新启动程序的功能。第二个类是我的Main.as
类,它调用finishNow();
函数Program.as
来重新启动程序。
它在第一次运行时运行良好。问题是,几乎只要它重新启动,它似乎就会自行重新启动。它也给出了相当多的ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
错误。我还注意到,当程序重新启动时,某些功能(例如 TIMERS)不会再次从 0 开始??我真的很难过,因为逻辑似乎没问题,但痕迹却不然。
将跟踪放在里面Program.as
表明该finishNow();
函数在第一次运行后被重复调用。问题在于programRestartTimer
没有在新实例上重置。通过暂时调用stop();
函数来解决这个问题。programRestartTimer
从Error #2025
不断显示的情况来看,我怀疑在第一次运行中未删除的显示子项(或类似的 - 例如其他计时器也未重置)会导致此问题。这表明程序没有创建一个全新的实例,或者 AS3 不可能?
程序.as:
package {
import flash.display.MovieClip;
public class Program extends MovieClip {
var runMain:Main;
public function Program() {
startNow();
}
function startNow() {
runMain = new Main(this);
addChild(runMain);
}
function finishNow() {
removeChild(runMain);
runMain = new Main(this);
addChild(runMain);
}
}
}
主要作为:
package {
import flash.display.Sprite;
public class Main extends Sprite
{
public var program:Program;
var programRestartTimer:Timer = new Timer(8 * 1000);
public function Main(stageHolderTemp) {
program = stageHolderTemp;
trace(program);
someFunctionsThatDrawGraphics();
moreFunctions();
}
function callFinishFunction():void { // this is called at the end of the animation
programRestartTimer.start();
programRestartTimer.addEventListener(TimerEvent.TIMER, restartProgram);
}
function restartProgram(e:TimerEvent):void {
programRestartTimer.stop(); // this line is a temporary "fix" to stop the program from constantly restarting
// it doesn't actually fix the full problem
program.finishNow();
}
}
}