インスタンスを削除して別のインスタンスに置き換えるために使用する関数に問題があります。基本的に、何があってもアイテムをメモリに保持します。オブジェクト内には弱いリスナーがあり、削除された後にすべてを無効にしますが、まだアクティブであるかどうかを確認するために実行する関数は、それがアクティブであることを示します (Event.ENTER_FRAME が弱いリンクを含むテキストをトレースするだけです)。
ロードしているインスタンスからすべてを削除した場合でも、トレースによると、まだメモリに残っているようです。ステージから削除した後に無効にするよりも、メモリから何かを完全に削除するにはどうすればよいですか? 私は何かを見ていませんか?
これは機能です:
private function loadArea(inputArea:String)
{
//This is for a checker to make sure that areas only get loaded once.
currentRoom = inputArea;
//If the area currently loaded is not null, make it null now.
if(selectedArea != null) selectedArea = null;
//Null any data inside of the reference used to create the name of the new area.
areaReference = null;
//Grab the class using the input.
areaReference = getDefinitionByName(inputArea + "Area") as Class;
//Null the sprite used to house the class
areaSprite = null;
//Set the holder as a new instance of the desired class.
areaSprite = new areaReference() as Sprite;
//If the selected area is still not null for some reason,
if(selectedArea != null)
{
//Remove the area from the container...
areaContainer.removeChild(selectedArea);
//...and nullify it.
selectedArea = null;
}
//Set the current area as the newly created instance.
selectedArea = areaSprite;
//If the area is not the "Game", load in the assets one way,
if(inputArea != "Game") selectedArea.construct(areaAssets);
//otherwise do it another way.
else selectedArea.construct(newScreenData,apiServer,cdnServer,areaAssets);
//This is for a checker that fades out the screen, which it needs to fade back in soon.
newScreenData = null;
//While the container for areas has any areas inside of it, remove them.
while(areaContainer.numChildren) areaContainer.removeChildAt(0);
//...then add the new instance area to the container.
areaContainer.addChild(selectedArea);
//...then let all the parts of the game know that a new area has been laoded in.
Global.echoEvent.echo("gameBootUp","playAreaIn");
}