2017-03-22 5 views
-1

Ich versuche, ein einfaches 2D-Spiel in Python mit Pygame zu erstellen. Dieses Spiel ist ein Überbleibsel der Alien-Invasion, wo man die Aliens erschießt, bevor sie den unteren Teil des Bildschirms erreichen. Das Spiel kompiliert und läuft, aber das Problem, das ich habe, ist in Bezug auf die Kugeln. Sie durchlaufen nicht den Bildschirm. Das Problem begann, nachdem ich Code hinzugefügt hatte, um die Aliens zu bewegen. Ich habe versucht, die Geschwindigkeit der Kugel anzupassen, aber das hat nicht funktioniert. Unten ist ein Link zu meinem Kern mit allen Modulen, die ich benutze. Irgendwelche Ideen, wie ich die Kugeln bewegen kann?Warum laufen meine Geschosse nicht in meinem Pygame-Programm?

https://gist.github.com/dewest91/1d5d5ee538a4f68bfacc84c4081c24f8

+5

Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den ** kürzesten ** Code enthalten, der zur Reproduktion ** in der Frage selbst notwendig ist ** . Siehe [help/on-topic] – khelwood

Antwort

1

Das ist, weil Sie eigentlich nie die update Methode des Objekts Bullet nennen.

Ich vermute, Sie wollen es in der update_bullets Funktion tun, also hier ist die Lösung.

def update_bullets(aliens, bullets): 
    """Update position of bullets and get rid of old bullets.""" 
    #Check for any bullets that have hit aliens. 
    #If so, get rid of the bullet and the alien. 
    collisions = pygame.sprite.groupcollide(bullets, aliens, False, True) 


    #Get rid of bullets that have disappeared. 
    for bullet in bullets.copy(): 
     bullet.update() 
     if bullet.rect.bottom <= 0: 
      bullets.remove(bullet) 

    print(len(bullets)) 

würde ich empfehlen, for bullet in bullets.copy() zu for bullet in bullets ändern. Da es die Kopiermethode nichts ändert! Wenn Sie mir nicht glauben, fügen Sie eine print(bullets) vor und nach der Änderung: Sie werden sehen, dass in diesem Zusammenhang .copy() ist nur eine Verschwendung von Zeit, Speicher und ist schlechte Kodierung Form.

+0

Danke Claymore, das war's! –

Verwandte Themen