問題
當子彈大多數時候與敵人相撞時,很少有其他敵人會在 0.05 秒內不可見(閃爍)。好吧,我知道它為什么會發生,但我不知道如何解決它。
代碼
這是我的敵人傷害代碼:
for e in range(len(enemy.x)):
angle = math.atan2(player.y - enemy.y[e], player.x - enemy.x[e])
enemy.vel[e] = [math.cos(angle) * 2, math.sin(angle) * 2]
enemy.x[e] = enemy.vel[e][0]
enemy.y[e] = enemy.vel[e][1]
rect = pygame.draw.rect(win, (255, 0, 0), (enemy.x[e], enemy.y[e], 40, 40))
if rect.collidelistall(bullet.rect):
enemy.healt[e] -= 1
if enemy.healt[e] <= 0:
del enemy.x[e]
del enemy.y[e]
del enemy.t[e]
del enemy.vel[e]
del enemy.healt[e]
del bullet.x[rect.collidelistall(bullet.rect)[0]]
del bullet.y[rect.collidelistall(bullet.rect)[0]]
del bullet.vel[rect.collidelistall(bullet.rect)[0]]
del bullet.dmg[rect.collidelistall(bullet.rect)[0]]
break
為什么敵人會眨眼
敵人會眨眼,因為當一個敵人受到攻擊時,它需要脫離回圈,即使還有幾個敵人需要閃擊。
為什么我需要跳出回圈
好吧,如果不這樣做Index,當敵人被摧毀時,我會出錯。這是因為當一個敵人被摧毀時,整個串列會變小。
謝謝你的幫助!
uj5u.com熱心網友回復:
請參閱如何在迭代時從串列中洗掉專案?.
在您的情況下,問題很難解決,因為您不僅有一個串列,每個坐標和每個速度都有單獨的串列。使用具有坐標和速度屬性的敵方物件很容易處理此問題。因此,您將擁有一份敵人串列,而不是多個坐標和速度串列。
無論如何,解決問題的一個簡單技巧是以相反的順序遍歷串列:
for e in range(len(enemy.x)):
for e in range(len(enemy.x)-1, -1, -1):
所以你可以擺脫這種break說法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442510.html
