kleiner Animator
Hallo alle zusammen!
Bin grad dabei einen simplen vogelperspektive-shooter zu programmieren, läuft soweit ganz gut is halt ziemlich viel arbeit
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:
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.
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!
Bin grad dabei einen simplen vogelperspektive-shooter zu programmieren, läuft soweit ganz gut is halt ziemlich viel arbeit
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()
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!