2016-06-29 16 views
0

Ich arbeite mit Python 2.7 und Pygame auf einem Space Invaders Klon. Ich kann meinen Panzer bewegen, Kugeln schießen und die Alienschiffe werden gelöscht, damit die Kollisionserkennung funktioniert. Ich habe eine Sprite-Gruppe erstellt und ich hatte gehofft, dass ich alle Schiffe als eine Gruppe bewegen könnte. Ich habe auch die "Unionall" versucht, aber das scheint nicht mit der Gruppe zu arbeiten. Ich kann eine Schleife durch alle Schiffe wie folgt aus:Verschieben einer Gruppe von Sprites als eine

shipXpos = [] 
for ship in shipList: 
    shipXpos.append(ship.rect.x) 

Dann

shipXMax = max(shipXpos) 
shipXMin = min(shipXpos) 

Auf diese Weise ich die Grenze der Schiffe finden wollen (obwohl ich denke, rect.right und rect.left wäre besser) verglichen mit den Kanten, wenn der Bildschirm so, dass ich die Schiffsrichtung ändern kann.

Es scheint, wenn ich alle Sprites als ein großes Rect behandeln könnte, wäre das der einfachste Weg.

Ich hoffe, das macht Sinn und ist klar. Vielen Dank.

+0

Hmm die Beschreibung für die "Bewegung" Tag sagt "NICHT verwenden - mehrdeutig" ... sind Sie sicher, dass Sie es verwenden möchten? Es kann mehrdeutig sein, imo :) –

Antwort

0

Schreiben Sie in der Sprite-Klasse für die Alien-Schiffe eine update-Funktion, die das Alien-Schiff bewegt. Sie können ihm alle Parameter übergeben, die Sie benötigen (z. B. die aktuelle Richtung links oder rechts). Verwenden Sie dann in Ihrem Hauptprogramm pygame.sprite.Group.update(), um alle Sprites gleichzeitig zu aktualisieren.

Je nach gewünschtem Verhalten müssen Sie die Seiten des Bildschirms möglicherweise nicht auf Kollision überprüfen. Ich nehme an, du willst alle Alienschiffe einstimmig bewegen, dh wenn das Äußerste die Kante trifft, willst du, dass alle Schiffe die Richtung wechseln. Die ursprünglichen Space Invaders tun dies auch, wenn das äußerste Schiff zerstört wurde, was bedeutet, dass die verbleibenden Schiffe nicht zum äußeren Rand gelangen, sondern auf ihrem vordefinierten Pfad bleiben. In diesem Fall bewegt jedes Schiff eine bestimmte Anzahl von Pixeln nach rechts, bevor es nach links wechselt, und Sie müssen nur diese Schleife in der update Funktion verfolgen.

+0

Das macht Sinn, danke. Tatsächlich habe ich es in der Zwischenzeit etwas anders gemacht. Ich habe eine Funktion geschrieben, um die Max- und Min-X-Positionen aller Schiffe zu finden. Also habe ich die aktuelle Schiffsliste in die Funktion übernommen und die Max- und Min-Positionen zurückgegeben. Diese wurden in Verbindung mit der Schiffsrichtung in eine if-Anweisung eingegeben, die basierend auf der aktuellen Position den nächsten Zug festlegt. Danke dafür und auch ich wusste nicht, dass das originale Spiel das getan hat. Große Antwort, vielen Dank noch einmal. – alfo35x