所以我做了一个简短的脚本,如果我与一个平台发生碰撞,它应该删除我的1个健康状况,但是我遇到了这个错误
我要说的视频的视频<-如您所见,如果我与冰砖碰撞,它将删除我的一名球员健康-
'list assignment index out of range'
for dude in range(len(platforms)-1,-1,-1):
if playerman.rect.colliderect(platforms[dude].rect):
del healths[dude]
我的完整代码不适合我,所以我把它变成了一个pastebin script
答案 0 :(得分:1)
在删除元素之前检查其是否存在。
for dude in range(len(platforms)-1,-1,-1):
if playerman.rect.colliderect(platforms[dude].rect):
if dude < len(healths): #Check
del healths[dude]
答案 1 :(得分:1)
尚不完全清楚为什么您要通过平台向后浏览,而不是根据此处的代码向前浏览平台列表。 for循环中还有更多代码吗?
无论如何,所使用的range()规范将使其保持在列表platforms
的范围内,因此这表明列表healths
超出了范围。>
实际上是健康清单吗?这是管理/保持玩家健康状况的奇怪方法。通常,您只需与柜台联系即可。什么是healths
?
无论如何,列表health
和platforms
为何大小相同?这似乎是显而易见的问题。似乎您是通过管理一堆对象来管理健康的,每个对象都以某种方式表示健康单位,并且要删除健康单位,您需要删除healths
列表中的某些内容。如果是这样的话,则从healths
中删除一个条目,从healths
中删除哪个条目都没关系。您可以使用healths.pop()
删除列表中的最后一个条目(删除最后一个条目,这是最有效的删除方法)。
for dude in range(len(platforms)-1,-1,-1):
if playerman.rect.colliderect(platforms[dude].rect):
healths.pop()
但是,这仍然是跟踪健康状况的一种非常奇怪的方法。我建议您重新检查一下。