2016-04-15 10 views
0

Ich mache ein plattform spiel in flash cs4 as3 und habe viel probleme bekommen meine verschiedenen klassen, um richtig zusammen zu arbeiten. Ich habe eine Kugelklasse, eine feindliche Klasse und eine Stoßstangenklasse, die die Grenzen für den Feind bestimmt. Wenn die Kugel den Feind trifft, wird die Tod Animation des Feindes gespielt und beide werden aus dem Spiel entfernt. Wenn der letzte Feind auf dieser Ebene jedoch entfernt wird, erhalte ich den Fehler, dass ein Begriff nicht definiert ist und keine Eigenschaften hat. Auch wenn ich die Feinde aus der Reihenfolge töte, in der sie Dinge genannt werden, die nicht richtig funktionieren, müssen meine Codes einige Fehler haben. Hier ist mein Code zwischen der Kugel und feindlichen Klassen:flash as3 plattform spiel (ich bin noob)

if (enemyList.length>0) { 
     for (var i:int = 0; i < enemyList.length; i++) { 
      if (bulletList.length>0) { 
       for (var j:int = 0; j < bulletList.length; j++) { 
        if (enemyList[i].hitTestObject(bulletList[j])) { 
         trace("Bullet and Enemy are colliding"); 
         enemyList[i].gotoAndPlay("dead"); 
         bulletList[j].removeSelf(); 
         enemyList[i].xSpeedConst=0; 
         enemyList[i].isDead = true; 
        } else { 
         enemyList[i].isDead = false; 
        } 
       } 
      } 
     } 
    } 
} 

und auch zwischen dem Spieler und Feind und Stoßfänger und Feind.

if (enemyList[k].isDead == false && enemyList.length>0) { 
     for (var k:int = 0; k < enemyList.length; k++) { 
      if (enemyList[k].isDead == false && bumperList.length>0) { 
       for (var h:int = 0; h < bumperList.length; h++) { 
        if (enemyList[k].hitTestObject(bumperList[h])) { 
         enemyList[k].changeDirection(); 
        } 
       } 
      } 
     } 
    } 

    if (enemyList[m].isDead == false && enemyList.length>0) { 
     for (var m:int = 0; m < enemyList.length; m++) { 
      if (enemyList[m].hitTestObject(player)) { 
       trace("player collided with enemy"); 
       currentHP-=5; 
       if (currentHP<=0) { 
        currentHP=0; 
        trace("you died"); 
        gotoAndStop(1); 
       } 
       updateHealthBar(); 
      } 
     } 
    } 

Traurig ist es ein bisschen lange ich fühle mich wie Im fehlt etwas offensichtlich hier oder vielleicht alle meine Code nur schlecht strukturiert ist. In jedem Fall würde jede Hilfe sehr geschätzt werden, danke!

+0

Die Außenseite der for-Schleife 'if (enemyList [ k] .isDead == false && enemyList.length> 0) {'sollte' sein if (enemyList.length> 0) {'. –

+0

Und ich denke 'sonst {enemyList [i] .isDead = false;}' ist überflüssig. Es überschreibt manchmal 'isDead = true' zu' false', verursacht nicht den Tod des Gegners (zB wenn bulletList [4] den Gegner trifft, ist der Gegner tot. Wenn bulletList [5] den Gegner nicht trifft, Gegner wiederbeleben.) –

+0

@ Yasuyuki: es macht nicht viel Sinn, diese for-Schleife in diese if-Anweisung zu packen, weil der Körper der for-Schleife einmal für jedes Array-Element läuft. Wenn keine Elemente vorhanden sind, wird es nicht ausgeführt. Die if-Anweisung, die die Länge des Arrays überprüft, ist redundant. Es sollte vollständig entfernt werden. – null

Antwort

0

Sie brauchen die Kugel und den Feind nicht aus den Listen zu entfernen, sobald eine Kugel einen Feind getroffen hat? Weil Sie tun

bulletList[j].removeSelf(); 

, die wahrscheinlich die Kugel aus der Anzeigeliste wird entfernen, aber die Kugel Referenz wird noch in der Bullet bleiben und gegen auf der nächsten Iteration überprüft werden.

Auch sollte Ihre erste Scheck

if (enemyList.length != 0 && bulletList.length != 0) 

sein Es macht keinen Sinn, alle Feinde zu Schleife Trog ist, wenn es keine Kugeln und umgekehrt :)

+0

danke für die Eingabe Ich habe die bulletList selbst entfernen Ich habe versucht, Ihre if-Anweisung hat es nicht funktioniert :( – Dan

+0

Ja, aber Sie müssen auch die Bullet-Instanz aus Ihrer BulletList entfernen, sonst würde es in der nächsten Schleife überprüft werden wieder, obwohl es bereits von der Bühne entfernt wurde, genauso wie deine Feinde – Philarmon