2011-05-10 2 views
1

メインクラスを使用して他のムービークリップを制御し、必要に応じて追加または削除するアプリケーションがあります。そのほとんどは別のスクリーンまたはサブメニューです。表示リストからオブジェクトを削除する

メインメニューを離れて後で別の画面から戻ってくると、特定のアニメーションやロールオーバーボタンがまだ再生されていますが、私は基本的にメインメニュー画面が表示されるたびにリセットする必要があります。

これを読んで、子を削除しても、必ずしもそれがメモリから削除されるとは限りません。

別の画面に移動する前にメインメニューをnullに設定しようとしましたが、パラメータchildがnullでない必要があるというエラーが表示されました。

誰も私のメインメニューを完全に消す方法については、必要がないときにそれを捨てることができますか?

public function confSubMenuOneScreen():void { 
     subMenuOneScreen = new SubMenuOne(); 
     mainmenu = null; 
     removeChild(mainmenu) 
     addChild(subMenuOneScreen) 
     currentScreen = subMenuOneScreen; 
    } 

これは、メニューを削除し、エラーをスローMAINMENU = NULLコードを、別の画面を追加するコードの一例です。

答えて

1

エラーは、オブジェクトをnullに設定してからオブジェクトを削除しようとしているためです(nullになりました)。 2行を逆にすると、おそらくエラーが修正されます。 しかし、ガベージコレクションがそれを削除するまで、オブジェクトをメモリから解放することはありません(アプリケーション内の "mainmenu"への他の参照がないと仮定します)。

オブジェクトを削除して新しいオブジェクトを作成するのではなく、「メインメニュー」のインスタンスを1つ作成して再利用することをお勧めします。次に、表示リストから削除し、再度必要なときに追加し直します。

+0

メインメニューを削除して他の画面を追加するようないくつかの機能があります。メインメニュー変数はmain.asファイルの先頭で宣言されていますが、表示リストから何かを削除するにはどうすればよいですか? – user747714

+0

removeChild()は、表示リストからオブジェクトを削除します。しかし、nullに設定することで、MainMenuを追加するたびにMainMenuの新しいインスタンスを作成する必要があります。リセットする必要がある場合は、reset()という "MainMenu"クラスにインスタンスを元の状態に戻す関数を作成します。 – Corey

+0

それで、私はヌルのアイデアを捨てています。だからMainMenuクラスで私はそれをリセットする関数を持っていた場合、それを削除する前にどのように呼び出すのでしょうか?私は、メインクラスから削除されているクラスでリセット関数をどのように持つことができるかについて少し混乱しています。 – user747714

関連する問題