Flash Professional CS5.5 で AS3 を使用してゲームを作成しています。
このゲームには「再」ボタンがあり、プレイヤーはレベルをリセットして新しいところから始めることができます。私の問題は今です:
「もう一度」クリックすると、ステージはnullになります。
「ResetLevel」メソッドで行うことは、一部の要素の x 位置と y 位置を 0 に戻し、ムービークリップから一部の項目を削除することだけですが、表示リストからすべての項目を削除するわけではありません。したがって、背景、hud、飛行機はムービークリップから削除されません。ここに私のディスプレイリストのスケッチがあります。取り外し可能なアイテムは、ゼロの場合もあれば、30 以上の場合もあります (プレイ時間などによって異なります)。
Displaylist:
stage
|-- Game movieclip
|--LevelBackground
|--Removeable item
|--Removeable item
|--Removeable item
|--Plane
|--HUD
しかし、「取り外し可能なアイテム」を削除し、levelbackground と plane の位置座標を設定すると、ステージは null になります。
誰かがこの問題の解決策を教えてくれるかもしれません。
編集:
「ResetLevel」メソッドは「ゲーム ムービークリップ」内で呼び出され、「ゲーム ムービークリップ」からもステージにアクセスします。そのため、レベルをリセットするときに「ゲームのムービークリップ」をディスプレイリストから削除しません。ゲームのムービークリップに含まれる一部の要素のみをムービークリップから削除します。
「ゲーム ムービークリップ クラス」(GameMC) の疑似コードを次に示します。
public class GameMC extends Sprite {
//Some properties here
public function GameMC() {
//Some code here
//--Events--
this.addEventListener(Event.ADDED_TO_STAGE, Init, false, 0, true);
this.addEventListener(Event.REMOVED_FROM_STAGE, Removed, false, 0, true);
}
private function Init(e:Event) {
this.removeEventListener(Event.ADDED_TO_STAGE, Init);
//Some Code here
}
private function ResetLevel() {
//Some Code here, too
if(removeItemArray.length > 0) {
for(i = 0; i < removeItemArray.length; i++) {
currentRemoveableItem = removeItemArray[i];
this.removeChild(currentRemoveableItem );
removeItemArray.splice(i, 1);
}
}
level.x = 0;
level.y = 0;
trace(stage); //Will output null
}
}