gpt4 book ai didi

python-3.x - pygame 游戏有时会因这段代码而崩溃

转载 作者:行者123 更新时间:2023-12-04 15:28:18 26 4
gpt4 key购买 nike

在我的 pygame 游戏中,我正在比较 2 个对象之间的距离,并在它们靠得太近时尝试“弹出”它们,但有时(看似随机)代码在碰撞时崩溃。如果有人可以帮助我,那就太好了。

错误信息是:

IndexError: list index out of range

相关代码:

for i in reversed(range(len(birdies))):
birdies[i].moveBird()
birdies[i].calcSpeeds()
birdies[i].drawEnemyBird()

for j in reversed(range(len(shots))):
if distance(birdies[i].x, birdies[i].y, shots[j].x, shots[j].y) < shots[j].rad/2 + birdies[i].width/2:
birdies.pop(i)
shots.pop(j)

最佳答案

我会建议一个替代解决方案。

由于列表以相反的顺序迭代,唯一的问题是内循环中的 birdies.pop(i),正如@Kingsley 所指出的。

在外循环中添加一个状态pop_bird,并在需要移除鸟时在内循环中设置状态:

for i in reversed(range(len(birdies))):
birdies[i].moveBird()
birdies[i].calcSpeeds()
birdies[i].drawEnemyBird()

pop_bird = False
for j in reversed(range(len(shots))):
if distance(birdies[i].x, birdies[i].y, shots[j].x, shots[j].y) < shots[j].rad/2 + birdies[i].width/2:
pop_bird = True
shots.pop(j)

if pop_bird:
birdies.pop(i)

可能这就足够了,break内循环,如果一只鸟被击中,因为一只鸟不能被射中两次:

for i in reversed(range(len(birdies))):
birdies[i].moveBird()
birdies[i].calcSpeeds()
birdies[i].drawEnemyBird()

for j in reversed(range(len(shots))):
if distance(birdies[i].x, birdies[i].y, shots[j].x, shots[j].y) < shots[j].rad/2 + birdies[i].width/2:
birdies.pop(i)
shots.pop(j)
break

关于python-3.x - pygame 游戏有时会因这段代码而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61810565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com