Flashhilfe.de - Flash Community

Objekte auf der Bühne [AS3] [Flash 9]

 


AntwortenRegistrieren Seite1  

Tseng#1
Benutzerbild von Tseng
Beiträge: 51
Registriert: Oct 2007

25.01.2008, 10:00

Hi,

ich habe mal eine recht allgemeine Frage. Erstmal erkläre ich den Sachverhalt.
Ich habe auf meiner Hauptbühne mehrere Abschnitte, die jeweils einen bestimmten Teil des Films anzeigen. An den gegebenen Keyframes sind dann die jeweiligen MovieclipInstanzen auf der Bühne, die eine eigene Klasse haben. Dazu kommt meine Menüklasse, die die Buttons steuert und die Klicks der Buttons abfängt und zum entsprechenden Lable auf der Hauptbühne springt. Funktioniert soweit 100%ig.

Jetzt zur Frage: Wenn ich zwischen den Bereichen "herumspringe" sollten die Objekte doch eigentlich vom GC gelöscht werden, da sich ja dann auch keine Instanz des MovieClips mehr auf der Bühne befindet, oder? Komischerweise verschwinden sie aber nicht. Bemerkt habe ich das nachdem ich in einem Abschnitt einen FLV-Player eingebaut habe und beim "Springen" lief der Film immernoch. Zumindest hörte ich den Sound noch. Dazu kommt, dass ich beim erneuten Klicken auf den Menübutton (der zum FLV-Player führt) den Film nochmals angezeigt bekomme. Und ich höre dann auch den Sound doppelt.

Kann mir das einer erklären? Vielen Dank im Voraus.

Tseng

Tseng#2
Benutzerbild von Tseng
Beiträge: 51
Registriert: Oct 2007

Themenautor/in

28.01.2008, 10:00

Weiss niemand, was man da machen könnte?

burnZ#3
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

28.01.2008, 10:51

vll solltest du das "springen" dann doch lieber auch in deiner menuklasse vornehmen, also sprich statt labels:

- alten clip removen und löschen (delete, removeChild)
- neuen erzeugen und hinzufügen (addChild)

der_hess#4
Benutzerbild von der_hess
Beiträge: 115
Registriert: Mar 2006

28.01.2008, 10:55

Vielleicht solltest du mal die EventListener removen, denn die werden weiterhin ausgeführt bis das Objekt von der Garbage Collection wirklich gelöscht (aus den Speicher entfernt) wird.

Zur Garbage Collection und Ressourcen Management gibts 2 sehr gute Artikel von gSkinner. Die bringen vielleicht ein bissl Licht ins Dunkle und könnten evtl. auch dein Problem lösen.

http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html
http://www.adobe.com/devnet/flashplayer/articles/resource_management.html

Gruß
Flo

-- http://www.derhess.de --
Gruß
Flo

-- http://www.derhess.de --
Geändert von der_hess am 28.01.08 um 10:57 Uhr
Tseng#5
Benutzerbild von Tseng
Beiträge: 51
Registriert: Oct 2007

Themenautor/in

28.01.2008, 12:06

Hi,

erstmal danke für eure Antworten. Die Artikel haben echt geholfen. Nun nochmal zum Verständnis:

Ich könnte also in meiner Menüklasse ein Variable a anlegen, die eine Referenz auf das Objekt enthält, dass momentan "auf der Bühne" ist (das lable sozusagen). Dieses Objekt enthält eine Funktion cleanup(), die alle EventListener, Objekte usw. löscht. Danach lösche ich in der Menüklasse die Referenz und belege sie mit einen neuen Referenz (dem neuen Inhalt)

Beispiel:

ActionScript:
1
2
3
4
5
6
7
var a:Object = new SeiteEins();    // SeiteEins wird angelegt
a.cleanup();    //löscht alle EventListener usw. von SeiteEins

delete(a);    //löscht das Objekt
a = new SeiteZwei();  // SeiteZwei wird angelegt.
a.machwas();



Wird SeiteEins nun vom GC mitgenommen, oder nicht? Und kann ich innerhalb von SeiteEins eine Funktion aufrufen, die das Objekt selbst löscht? Also delete(this)? Dann könnte man das nämlich in die cleanup() Funktion einbauen.

Ich hoffe es ist verständlich. Danke im Voraus!

Tseng
Geändert von Tseng am 28.01.08 um 12:06 Uhr
badskill#6
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

28.01.2008, 12:23

Hi,
ActionScript:
1
2
3
4
5
6
var a:SeiteEins = new SeiteEins();
a.cleanup();
a = null;

var b:SeiteZwei = new SeiteZwei();
b.machwas();

Damit sollte a vom GC als löschbar erkannt werden, sofern die cleanup-Funktion richtig alles richtig macht.
Geändert von badskill am 28.01.08 um 12:24 Uhr
Tseng#7
Benutzerbild von Tseng
Beiträge: 51
Registriert: Oct 2007

Themenautor/in

28.01.2008, 13:20

Und wenn ich nun nur über a Funktionen aufrufen möchte? Ich würde einfach das Objekt selbst an a übergeben, oder? Und kann ein Objekt sich selbst löschen? Also über delete(this)? Ihr helft mir hier echt weiter, vielen Dank.

Tseng

badskill#8
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

28.01.2008, 13:37

a hat einen bestimmten Typ. Daher kannst du auch nur Referenzen gleichen Typs (einschliesslich vererbte Typen, sowie Interfaces) an a übergeben.
Um eine Variable dem GC zugänglich zu machen, setzt man dessen Referenz auf 'null' (und löscht auch alle evt. Listener, sowie sämtliche anderen Referenzen drauf)
delete funktioniert in AS3 nicht mehr so, wie in AS2. Einfaches löschen von Klasseninstanzen geht damit nicht mehr.


AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de