【发布时间】:2018-01-14 23:01:13
【问题描述】:
我正在使用 python 制作一个涉及通电的游戏。有一个随机生成的机会,它会在屏幕上显示它的图像。一旦玩家的身体(本场景中的船长)与它发生碰撞,它就会从列表中随机选择一个强化道具。我正在检查与图像位置(相同大小)的矩形的碰撞并尝试删除矩形,并在发生碰撞时删除图像。我怎样才能做到这一点?到目前为止,这是我的尝试,但是,我一直收到错误消息:“列表分配索引超出范围”并且它突出显示了以下行:del PowerYList [Spot]。谁能告诉我我做错了什么?
if random.randint(1,2500) == 2500:
PowerY = random.randint(125,585)
PowerRect = Rect(930, PowerY, 50,50)
PowerYList.append(PowerY)
PowerRects.append(PowerRect)
for X in PowerYList:
Screen.blit(PowerUp, (930, X))
Radius = 0
for X in PowerRects:
if X.colliderect(Rect(942, CaptainY, 15, 30)) == True:
Power = random.choice(PowerUps)
Power = "Nuke"
Spot = PowerRects.index(X)
del X
del PowerYList[Spot]
if Power == "Health":
if Health <= 85:
Health += 15
else:
Health += 100-Health
elif Power == "Nuke":
Radius = 0
for Y in range(1,50):
draw.circle(Screen, ORANGE, (500, 350), Radius+50)
draw.circle(Screen, RED, (500,350), Radius)
Radius += 5
Gigabits = []
Gigabits_Heads = []
Gigabit_Health = []
S_Gigabits = []
S_Gigabits_Heads = []
S_Gigabit_Health = []
【问题讨论】:
-
我似乎看不到您的代码中的
Spot是什么。 -
提供Minimum, Complete and Verifiable 示例将帮助其他人帮助您。通常,您希望将背景图像(或填充)从刚刚删除的对象的矩形中填充。你还要做很多手工工作,我建议你使用sprites 和精灵组
-
阅读PEP 8 -- Style Guide for Python Code。 IE。对于变量我们使用
lower_case_names,对于我们使用CamelCaseNames的类。 -
总是将完整的错误消息(Traceback)放在有问题的地方(作为文本,而不是屏幕截图)。还有其他有用的信息。
-
为什么在
PowerRects中搜索Spot并仅从PowerYList中删除Spot?如果你从PowerYList中删除元素,那么它必须比PowerRects更短,并且你必须得到索引错误。您必须从两者中删除或在PowerYList中搜索Spot
标签: python image pygame collision-detection