所以在询问了碰撞检测之前,Collision Detection in a List, 我在
find_overlapping
功能。碰撞检测工作得很好,但由于我正在创建一个砖块断路器风格的游戏,我必须改变方向变量,这取决于球击中砖块的哪一侧。命中的程序块保存在变量“brick”中,但是当我尝试运行程序时,出现了一个错误,“ValueError:需要0个以上的值才能解包”。我猜这意味着它试图找到“brick”的坐标,但既然没有brick变量,它就不能运行了?有人能帮我解释一下吗。你知道吗
overlap = drawpad.find_overlapping(x1,y1,x2,y2)
length = len(overlap)
if length > 1:
listPlace = overlap[1] - 3
brick = bricklist[listPlace]
drawpad.delete(brick)
bx1,by1,bx2,by2 = drawpad.coords(brick)
if x1 <= bx1 or x2 >= bx2:
angle = -angle
if y1 <= by1 or by2 >= y2:
direction = -direction
我也重写了下面的代码,但是我想我只是因为出现了相同的错误信息而使它复杂化了。你知道吗
overlap = drawpad.find_overlapping(x1,y1,x2,y2)
length = len(overlap)
if length > 1:
listPlace = overlap[1] - 3
brick = bricklist[listPlace]
drawpad.delete(brick)
for x in bricklist:
if x == brick:
bx1,by1,bx2,by2 = drawpad.coords(x)
if x1 <= bx1 or x2 >= bx2:
angle = -angle
if y1 <= by1 or by2 >= y2:
direction = -direction
在移除对象之前获取坐标:
“ValueError:需要0个以上的值才能解包”表示您正在执行以下操作,但函数未返回任何结果:
您要求python“解包”函数的结果,并将结果分布在四个变量上。这要求函数实际返回四个值。错误消息告诉您它返回零项。所以这个错误的根本原因是你错误的假设函数总是返回四个值。你知道吗
在您的情况下,您正在呼叫
drawpad.coords(...)
。如果它返回的结果为零,则意味着您试图获取其坐标的对象不存在。这意味着(a)你对一个对象有一个很好的引用,但该对象已被删除,或者(b)你的引用不好。你知道吗您需要放入一些调试语句以确保
brick
(或x
)是您所认为的。您还需要确保在删除对象之前获得坐标,因为无法获得已删除对象的坐标。你知道吗相关问题 更多 >
编程相关推荐