Actionscript 3 - das vollständige entfernen von eine Kind
Ich habe ein array von Objekten, wenn ein anderes Objekt trifft, wird das Objekt entfernt werden. Ich habe es entfernt von der Bühne mit removeChild() und entfernt aus dem array mit splice(), aber irgendwie hat das Objekt ist immer noch ruft einige seiner Funktionen, die Fehler verursacht. Wie kann ich vollständig loszuwerden, ein Objekt? Es gibt keinen Ereignis-Listener gebunden.
was meinst du wenn du sagst "andere Objekte trifft einer von Ihnen" ?
Ich Teste für die Kollision eine hitTestObject, wenn es wahr ist dann will ich-Objekt aus dem array werden komplett aus dem Speicher entfernt.
Ich Teste für die Kollision eine hitTestObject, wenn es wahr ist dann will ich-Objekt aus dem array werden komplett aus dem Speicher entfernt.
InformationsquelleAutor | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie sicherstellen, dass die display-Objekts, das Sie entfernen:
stage.removeEventListener(...)
für die entsprechendenstage.addEventListener(...)
Event.ENTER_FRAME
VeranstaltungsetInterval
überallSo, wenn Sie haben entfernt das Objekt mit
removeChild
und entfernt es aus dem array aus, das Sie es gehalten, auch an seinerstop
Methode, um sicherzustellen, es ist nicht das Spiel Ihrer timeline. Es kann auch eine gute Sache zu haben, eine Methode auf diesem Objekt aufgerufen, so etwas wiehalt
,cleanup
oderfinalize
, de-registriert er jeden Zuhörer, Stoppt der Timer, timeouts, Intervalle, etc., löscht Verweise (d.h. setzt die Variablennull
) Eltern, die Bühne oder jedes Objekt, das ist nicht Weg zu.InformationsquelleAutor Theo
Es klingt wie Sie können ausgeführt werden, in eine garbage-collection-Problem mit dem flash player.
Eine neue API wurde Hinzugefügt, um Flash Player 10, sollten diese Adresse:
unloadAndStop()
Grant Skinner hat mehr Infos dazu auf seinem blog:
http://www.gskinner.com/blog/archives/2008/07/unloadandstop_i.html
Können Sie schnappen Sie sich einen beta des Flash Player 10 auf:
http://labs.adobe.com/technologies/flashplayer10/
mike chambers
[email protected]
InformationsquelleAutor mikechambers
Vollständig loszuwerden, ein Objekt in AS3 müssen Sie seinen Wert auf null. Die Garbage collection wird keine Probleme haben, es zu entfernen, da es keine Verweise darauf. Auch wenn kann hilfreich sein, die Verwendung von "weak references" mit Ereignis-Listener. Beim erstellen eines Ereignis-Listeners ist es in der Regel den event-Typ und die Funktion ausgelöst werden.
im folgenden werde ich veranschaulichen, das gleiche, aber mit einer schwachen Referenz.
Wissen wir, was die ersten zwei Parameter sind also beginnen wir mit der Dritten. Der Dritte parameter bestimmt, ob das Ereignis ausgelöst die onEventHappened Funktion während der capture-phase (true) oder bubbling-phase (false ist auch der Standardwert). Der einzige Grund, warum ich erwähne dieses Parameters ist, dass es erforderlich ist, vor der Festlegung der schwachen Referenz-parameter. Der vierte parameter ist die Priorität und bestimmt, welche Ereignisse haben Priorität, wenn sowohl das hören auf das gleiche Objekt und die gleiche phase im Ereignisablauf. Der fünfte parameter legt die schwache Referenz auf true oder false für diesen Fall verwenden wir wahr, die hilfreich für die garbage collection.
InformationsquelleAutor Brian Hodge
Ist das Objekt in Frage ist ein MovieClip, und hat es eine timeline zu spielen?
Wenn dem so ist, werden Sie brauchen, um es zu stoppen, bevor Sie Sie entfernen.
Beachten Sie auch, dass das speichern einer Referenz auf das Objekt in irgendeiner Art und Weise (obwohl die meisten Häufig in einen Ereignis-listener) halten Sie es aus immer Müll gesammelt. Dies umfasst alle Verweise auf Funktionen oder Kind-Objekte.
InformationsquelleAutor grapefrukt
Für eine Funktion, die aufgerufen werden, per definition muss es entweder Zuhörer oder setTimeOut irgendwo, oder die Zeitleiste muss spielen. Stellen Sie sicher, entfernen Sie alle Listener und alle Verweise auf das Objekt. Was für eine Art von Objekt handelt es sich?
Dem Ausgabe-Fenster oder debugger sollte zeigen Sie den stack der Funktionsaufrufe, die led, um die unerwünschten Anruf. Wenn Sie fügen Sie die Ausgabe des Fehlers in deiner Frage, dann sind wir in der Lage, Ihnen eine genauere Antwort.
InformationsquelleAutor Iain
Denken Sie auch daran, um zu stoppen und entfernen Sie alle zugehörigen Timer bei der Entsorgung der entfernten Objekte: BIT-101: Läuft der Timer sind nicht Müll gesammelt. Je.
InformationsquelleAutor hasseg
Ich würde schauen Event.ENTER_FRAME und TimerEvent.TIMER-Listener, stellen Sie sicher, Sie sind zunichte gemacht, bevor Sie das Objekt entfernen.
InformationsquelleAutor matt lohkamp