Erstellen eines schnellen Programms, in dem ein Benutzer auf ein bewegliches Ziel auf der gegenüberliegenden Seite des Bildschirms schießt. Der Benutzer kann das Ziel 3 mal verfehlen und dann ist das Spiel vorbei. Ich erkenne die Fehler und füge sie der Summe entsprechend hinzu, aber wenn es eine Kollision zwischen dem Ziel und der Kugel gibt (ein Treffer!) Subtrahiere ich von der Summe und setze sie im Wesentlichen zurück. Jetzt erwarte ich nur, dass es "1" subtrahiert, aber aus irgendeinem Grund subtrahiert es einen Haufen und bringt alles durcheinander. Irgendwelche Ideen, warum dies passiert und gibt es einen besseren Weg, dies zu tun? Ziel ist ein Pygame.Rect, Geschosse sind Sprites und Schiff ist ein Bild.Pygame Collision Detection Bug
def update_bullets(ai_settings, screen, stats, ship, bullets, target):
bullets.update()
for bullet in bullets.copy():
if bullet.rect.left >= ai_settings.screen_width:
bullets.remove(bullet)
stats.number_of_misses += 1
check_bullet_target_collisions(ai_settings, screen, stats, ship, bullets, target)
if stats.number_of_misses >= stats.max_number_of_misses:
stats.number_of_misses = 0
stats.game_active = False
bullets.empty()
pygame.mouse.set_visible(True)
def check_bullet_target_collisions(ai_settings, screen, stats, ship, bullets, target):
bullet_hit = pygame.sprite.spritecollideany(target, bullets)
if bullet_hit:
print("how many times")
stats.number_of_misses -= 1
Gute Sachen, du hast absolut Recht. Ich habe Ihren Vorschlag ausprobiert, aber ich konnte es nicht zum Laufen bringen, also nahm ich den dreckigen/faulen Ausweg und subtrahierte ".10" von "stats.number_of_misses" und konvertierte ihn dann in ein "int", um die Frames zu berücksichtigen. Ich werde mit anderen Alternativen spielen. Das Hauptproblem dabei ist, dass ich davon ausgehe, dass es jedes Mal 10 Frames sein wird. Nicht sicher, wie man die genaue Menge findet, aber das scheint jetzt zu funktionieren. Vielen dank für Deine Hilfe! – terratunaz