製作一個快速程序,用戶在屏幕另一側拍攝移動目標。用戶可以錯過目標3次,然後遊戲結束。我正在檢測未命中並相應地將它們添加到總數中,但是當目標和子彈之間發生碰撞(一次命中!)時,我從總數中減去重置它的次數。現在我只希望它減去「1」,但由於某種原因,它正在減去一堆,並搞亂了一切。任何想法爲什麼會發生這種情況,有沒有更好的方法來做到這一點?目標是一個pygame.Rect,子彈是精靈,船是一個圖像。Pygame碰撞檢測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
好東西,你是對的。我嘗試了你的建議,但無法實現它,所以我採取了骯髒/懶惰的方式,並從「stats.number_of_misses」中減去「.10」,然後將其轉換爲「int」來計算幀。我會玩弄其他選擇。這個問題的主要問題是我假設每次都是10幀。不知道如何找到確切的數量,但這似乎現在工作。非常感謝你的幫助! – terratunaz