ゲームでムービークリップを制御できるクラス Catcher があります。ゲームが終了して再起動できるように、ゲームをプログラムしようとしています。そのため、すべてを削除してメニューに戻る必要があります。解決するのは簡単なことですが、方法がわかりません。
これまでのところ、私は ourCatcher.parent.removeChild(ourCatcher); を持っています。ステージからムービークリップを削除します。そして、ステージに物をドロップする関数の 1 つを停止する if ステートメント。SoundMixer.stopAll(); 音楽を停止します。次に、ゲームオーバー画面であるフレーム 3 に移動します。
問題ないように見えますが、エラー コンソールに常に 1009 エラーが表示され、ゲームを再起動すると非常に遅くなります。Catcher がステージから削除され、現在は null であるため、Catcher 内で移動するための関数がまだ実行されており、エラーが発生しているようです。
キャッチャーに関係するすべてのことを参照解除する必要があることはわかっていますが、私の状況でそれを行うためのドキュメントをオンラインで見つけることができません。誰もがさまざまな方法を持っているようですが、私が試してみましたがうまくいきません。
キャラクターを動かすために使用している Catcher クラスの 2 つの関数:
public function Catcher(stageRef:Stage)
{
stop();
this.stageRef = stageRef;
key = new KeyObject(stageRef);
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}
//movement
public function loop(e:Event):void
{
if (key.isDown(Keyboard.A))
vx -= walkSpeed;
else if (key.isDown(Keyboard.D))
vx += walkSpeed;
else
vx *= friction;
//update position
x += vx;
//speed adjustment
if (vx > maxspeed)
vx = maxspeed;
else if (vx < -maxspeed)
vx = -maxspeed;
//stay inside screen
if (x > stageRef.stageWidth)
{
x = stageRef.stageWidth;
vx = -vx
}
else if (x < 0)
{
x = 0;
vx = -vx;
}
if (key.isDown(Keyboard.A))
{
scaleX = -1;
}
else if (key.isDown(Keyboard.D))
{
scaleX = 1;
}
movement();
// Jumping
jump += gravity;
if (y > stage.stageHeight /1.5)
{
jump = 0;
canJump = true;
}
if (key.isDown(Keyboard.SPACE) && canJump)
{
jump = -10;
canJump = false;
}
y += jump;
}
ステージから物を取り除くもう 1 つのクラスは CatchingGame と呼ばれ、オブジェクトをドロップする関数があります。playerlives == 0 の場合にゲーム オーバー コードを配置します。
if (playerLives == 0 )
{
stop();
ourCatcher.parent.removeChild(ourCatcher);
SoundMixer.stopAll();
gotoAndStop(3);
}
これが私の最初のフラッシュ ゲームなので、おそらく初歩的なミスを犯した可能性があります。これは私のゲームを完成させるための最後のステップであるため、どんな助けも大歓迎です.