{lang: 'de'}
Flashhilfe.de - Flash Community

removeChild() Parameter child darf nicht 'null' sein. [Flash 10]

 


AntwortenRegistrieren Seite1  

Orya#1
Benutzerbild von Orya
Beiträge: 16
Registriert: Jan 2010

27.10.2010, 12:41

Hi.
In einer Klasse packe ich einen MC auf die Bühne, mit:
ActionScript:
1
2
var rocket:MovieClip = new Rocket(x_speed, y_speed);
this.stage.addChild(rocket);


Von der Rocket-Klasse aus möchte ich den irgendwann wieder entfernen. Also habe ich da stehen:
ActionScript:
1
2
3
if(this.y > this.stage.stageHeight) {
     removeChild(getChildByName(this.name));
}


Funktioniert aber nicht. Flash behauptet, ich würde da NULL übergeben.
TypeError: Error #2007: Parameter child darf nicht 'null' sein. at flash.display::DisplayObjectContainer/removeChild()

Ich verstehe nicht wie der darauf kommt. Wenn ich mir z.B. getChildByName(this.name) per trace() ausgeben lassen, steht da: [object Rocket]. Wieso sagt er mir im trace() da wäre ein Objekt, aber wenn ich es dann entfernen will soll da dann doch nichts sein?

Habe es auch einfach mit removeChild(this) probiert. Da bekomme ich dann als Antwort:
ArgumentError: Error #2025: Das angegebene DisplayObject muss ein untergeordnetes Element des Aufrufers sein. at flash.display::DisplayObjectContainer/removeChild()

Jedenfalls dachte ich mir dann "na ja, dann halt anders" und habe es hiermit probiert:
this.parent.removeChild(this);

Klappt auch nicht. Dann erhalte ich einen:
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.

Sorry für die doofen Fragen, würde mich über Hilfe freuen.
Schlagwörter: Error 2007, removeChild
Geändert von Orya am 27.10.10 um 12:45 Uhr
Nova969#2
Benutzerbild von Nova969
Beiträge: 75
Registriert: May 2005

27.10.2010, 12:46

geht da nicht

ActionScript:
1
2
3
if(this.y > this.stage.stageHeight) {
       removeChild(this);
}


?
Orya#3
Benutzerbild von Orya
Beiträge: 16
Registriert: Jan 2010

Themenautor/in

27.10.2010, 12:47

Probiert. Dann bekomme ich einen:
ArgumentError: Error #2025: Das angegebene DisplayObject muss ein untergeordnetes Element des Aufrufers sein. at flash.display::DisplayObjectContainer/removeChild()

this.parent.removeChild(this) funktioniert auch nicht. Da gibt es dann einen TypeError: Error #1009
Geändert von Orya am 27.10.10 um 12:48 Uhr
Nova969#4
Benutzerbild von Nova969
Beiträge: 75
Registriert: May 2005

27.10.2010, 12:54

ActionScript:
1
2
3
if(this.y > this.stage.stageHeight) {
         this.parent.removeChild(this.parent.getChildByName(this.name));
}

kann aber sein das flash da auch wieder motzt, weil es untergeordnet sein muss.. ^^
Geändert von Nova969 am 27.10.10 um 12:57 Uhr
Orya#5
Benutzerbild von Orya
Beiträge: 16
Registriert: Jan 2010

Themenautor/in

27.10.2010, 13:03

Ach, ich glaub ich weiß woran es liegt. Die Y-Position wird ja mit jedem Frame geprüft. Der MC wird dann korrekt entfernt, und ist dann auch nicht mehr auf der Bühne. Der Code läuft aber trotzdem weiter, und versucht weiterhin das Objekt zu entfernen, das nicht mehr da ist (deswegen jammert er über NULL).

Nun muss ich nur noch herausfinden, wie ich nicht nur den MC von der Bühne entferne, sondern auch den dazugehören Code. Ich könnte natürlich abfragen, ob der MC auf der Bühne ist, und ihn dann entfernen. Aber dann würde der Code ja ewig weiterlaufen, was dann doch eine Resourcenverschwendung ist.

Danke schonmal. :)
Nova969#6
Benutzerbild von Nova969
Beiträge: 75
Registriert: May 2005

27.10.2010, 13:06

achso ^^
ich hab gedacht das das script in dem mc drin ist, weil das wird dann auch entfernt wenn der mc entfernt wird in dem sich das script befindet..

Du kannst aber dann auch eine try abfrage machen..


ActionScript:
1
2
3
4
5
if(this.y > this.stage.stageHeight) {
    try{
         this.parent.removeChild(this.parent.getChildByName(this.name));
    }catch(e:Error){trace("kleine Error Msg ;)")}
}
Orya#7
Benutzerbild von Orya
Beiträge: 16
Registriert: Jan 2010

Themenautor/in

27.10.2010, 13:12

An und für sich ist das Skript ja auch in dem MC drin. Also ich habe in dem seinen Eigenschaften die passende Klasse eingebaut. Aber mit removeChild verschwindet ja, wenn ich das richtig weiß, der MC nur von der Bühne, aber er existiert weiterhin.
Ja, mit try catch würde das wohl auch gehen, aber dann hätte ich ja nach einiger Zeit Unmengen an Funktionen und Krimskrams laufen die ich nimmer brauch. Da versuche ich mir lieber eine Funktion zu basteln, die alles entfernt was mit dem MC zu tun hatte.
Nova969#8
Benutzerbild von Nova969
Beiträge: 75
Registriert: May 2005

27.10.2010, 13:15

Mh nagut, das kann man natürlich auch machen ;P

evtl hiermit:

ActionScript:
1
2
3
4
5
6
7
8
if(this.y > this.stage.stageHeight) {
      try{
           this.parent.removeChild(this.parent.getChildByName(this.name));
 
          removeEventListener(Event.ENTER_FRAME,deinListener)
 
      }catch(e:Error){trace("kleine Error Msg ;)")}
}
Orya#9
Benutzerbild von Orya
Beiträge: 16
Registriert: Jan 2010

Themenautor/in

27.10.2010, 13:26

Hmmm, aber dann ist der Code für den MC ja immer noch da, obwohl ich ihn nimmer brauche.

Hatte hier folgendes gelesen:

parent.removeChild(this);

However, that will not remove the instance from memory, only the display list so it is not seen by the user. If you need the movie clip to be removed from memory, you will need to make sure there are no variables left that reference that movie clip. For class properties, null is used; for dynamic properties, delete.


Mal schauen wie ich das konkret umsetze. Warscheinlich einfach wie vorgeschlagen den EventListener und vielleicht einige Variablen löschen.
Geändert von Orya am 27.10.10 um 13:30 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

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

 
Ähnliche Beiträge zum Thema
Ein Lob an die Admins [Flash CS5] 08.05.2022 - Indy_Crossover
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de