(私は AS3 と Adobe AIR for iOS SDK で作業しています)。
このプログラムには 2 つのクラスがProgram.as
あります。最初のクラスは、FLA ファイルがリンクされているクラスです。プログラムを開始する関数と、Program.as
プログラムを再起動する関数があります。2 番目のクラスは、関数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 では作成できないことを示唆しています??
Program.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);
}
}
}
Main.as:
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();
}
}
}