Antworten auf deine Fragen:
Neues Thema erstellen

Fehler beim Entfernen eines Objekts

D0gProjects

kleiner Animator

Hallo alle zusammen!
Bin grad dabei einen simplen vogelperspektive-shooter zu programmieren, läuft soweit ganz gut is halt ziemlich viel arbeit:D

Anyways, hier mein Problem:
Ich habe momentan 2 Waffen die an und für sich funktionieren: Pistole und Schrotgewehr, wobei das schrotgewehr denselben Schuss wie die Pistole x5 abgibt (Class=Bullet).
Gelegentlich treten aber bei beiden, am Häufigsten bei der Schrot folgende Fehler auf:
Code:
ArgumentError: Error #2025: Das angegebene DisplayObject muss ein untergeordnetes Element des Aufrufers sein.
	at flash.display::DisplayObjectContainer/removeChild()
	at Enemy/loop()
Der Fehler erscheint in der Konsole aber das spiel geht, zumindest in Flash ganz normal weiter. Die Probleme treten auf falls man den "Film" in Flash exportiert und mit FlashPlayer spielen will.

Aufgrund der Fehlermeldung hab ich das Problem auch schon auf eine Methode reduziert.
Ausserdem habe ich mir gedacht, dass es etwas mit den RemoveChild-funktionen zu tun haben könnte, die ich der Übersicht halber rot hervorgehoben habe.
Code:
 private function loop(e:Event) {
   var yd:Number = core.Hero.y-y-core.enemyholder.y;
   var xd:Number = core.Hero.y-x-core.enemyholder.x+100;
   var angle:Number=Math.atan2(yd,xd);
   if (Math.sqrt(yd*yd + xd*xd) < 400){
   x+=Math.cos(angle)*2;
   y+=Math.sin(angle)*2;
   }
   rotation = Math.atan2(core.Hero.y-y,core.Hero.x-x) ;

   	
	
	for (var i2:int = 0; i2<core.enemyholder.numChildren; i2++) {
    var enemyTarget:Sprite=core.enemyholder.getChildAt(i2);
    if (hitTestObject(enemyTarget) && (enemyTarget != this)) {
   		var friendlyAngle:Number = Math.atan2(enemyTarget.x-x,enemyTarget.y-y)
		x+=Math.cos(friendlyAngle)*3;
	    y+=Math.sin(friendlyAngle)*3;
		x-=Math.cos(angle)*3;
		y-=Math.sin(angle)*3;
    }
	}
	
	
	if (hitTestObject(core.Hero))
		{
			core.life-=1;
			core.lifeRegeneration += 10;
			core.enemyholder.x+=Math.cos(angle+180)*3;
	   		core.enemyholder.y+=Math.sin(angle+180)*3;
			core.Bottom.x+=Math.cos(angle+180)*3;
	   		core.Bottom.y+=Math.sin(angle+180)*3;
			core.barricadesholder.x+=Math.cos(angle+180)*3;
	   		core.barricadesholder.y+=Math.sin(angle+180)*3;
		}
   
   for (var i:int = 0; i<core.bulletholder.numChildren; i++) {
    var bulletTarget:Sprite=core.bulletholder.getChildAt(i);
    if (hitTestObject(bulletTarget)) {
		core.bulletholder.getChildAt(i).RemoveListeners();
		if (bulletTarget != null)
   			[COLOR="red"]core.bulletholder.removeChild(bulletTarget);[/COLOR]
		life -= 1;
		if (Math.random()*10 > 8)
			life -= 1;
    }

	
	
	if (life <= 0)
   {
	 

     removeEventListener(Event.ENTER_FRAME, loop);
	 if (bulletTarget != null)
    	[COLOR="Red"] core.enemyholder.removeChild(this);[/COLOR]
   }
   }
   
  }

Ich weiß es ist brutal von mir euch einfach so einen rohen, hässlich strukturierten Code vor die Füße zu werfen und zu hoffen dass mir wer helfen kann, aber ich bin wirklich verzweifelt. Hilfe!
 

D0gProjects

kleiner Animator

AW: Fehler beim Entfernen eines Objekts

Ja, leider:'(
Hab das Projekt fürs Erse auf Eis gelegt, weil ich dank dieses Bugs nicht vorankomm!
 

muh83

Nicht mehr ganz neu hier

AW: Fehler beim Entfernen eines Objekts

Dein Fehler bezieht sich auf removeChild() und besagt, dass du versuchst ein Objekt zu remove, welches aber kein untergeordnetes Element des Aufrufers ist. Was soviel bedeutet:

Stell dir vor, du hast ein Sprite oder MovieClip namens mc1 in dem ein weitere Sprite oder MovieClip mc2 enthalten ist. Jetzt möchtest du mc2 entfernen. Wenn du versuchst mit removeChild(mc2) wirst du einen Fehler bekommen. Du musst ihn mit mc1.removeChild(mc2) entfernen. Ich hoffe, die Erklärung war hilfreich!?

Als Tipp hast du es mal mit dem Debugger probiert und Schritt für Schritt dir angeguckt, was dein Programm macht?
 

muh83

Nicht mehr ganz neu hier

AW: Fehler beim Entfernen eines Objekts

Ich vermute auch, dass der hier den Fehler verursacht, da er ja immer und immer aufgerufen wird und nicht durch ein Event eines Objektes:

Code:
removeEventListener(Event.ENTER_FRAME, loop);
     if (bulletTarget != null)
        [COLOR=Red] core.enemyholder.removeChild(this);[/COLOR]
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben