1 回答

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊
看起來這是問題所在:
def update(self):
if pygame.sprite.groupcollide(all_bats, all_sword, False, True):
self.bat_health -= 1
groupcollide返回碰撞列表。上面的代碼正在檢查all_bats,all_swords所以一切都 Vs 一切。并且if ( non-empty-list )總是返回True。
所以如果發(fā)生任何蝙蝠+劍的碰撞,這個精靈的生命值就會減少。每次任何蝙蝠碰撞時,這可能都會減少每只蝙蝠的數(shù)量。因此,創(chuàng)建的第一個項目將首先達(dá)到零。self.bat_health
您需要檢查“這個精靈”是否是碰撞的一部分。這是一個相當(dāng)簡單的改變:
def update(self):
hit_list = pygame.sprite.groupcollide(all_bats, all_sword, False, True):
if ( self in hit_list ):
self.bat_health -= 1
但是groupcollide在每只蝙蝠的update(). 也許將groupcollide調(diào)用移動到.update()函數(shù)之外的某個地方,并且只執(zhí)行一次這些計算。將碰撞結(jié)果傳遞給 sprite-update 函數(shù)等。
添加回答
舉報