所以在询问之前的碰撞检测后Collision Detection in a List, 我在
中添加了 find_overlapping
功能。碰撞检测工作正常,但由于我正在创建一个破砖风格的游戏,我必须根据球击中砖的哪一侧改变方向变量。被击中的砖被保存在变量'brick'中,但是当我尝试运行程序时出现错误,“ValueError:需要超过0的值才能解压缩”。我猜这意味着它试图找到'砖'的坐标但是因为没有砖变量但它无法运行?有人可以帮忙解释一下。
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
答案 0 :(得分:0)
在删除对象之前获取坐标:
if length > 1:
listPlace = overlap[1] - 3
brick = bricklist[listPlace]
# Get the coordinates
bx1,by1,bx2,by2 = drawpad.coords(brick)
# Now delete it
drawpad.delete(brick)
if x1 <= bx1 or x2 >= bx2:
angle = -angle
if y1 <= by1 or by2 >= y2:
direction = -direction
答案 1 :(得分:0)
&#34; ValueError:需要超过0个值才能解压&#34;表示您正在执行以下操作,但该功能未返回任何结果:
a,b,c,d = function(...)
你要求python&#34; unpack&#34;函数的结果并将结果分布在四个变量上。这要求函数实际返回四个值。错误消息告诉您它返回零项。因此,错误的根本原因在于您错误地假设函数始终返回四个值。
在您的情况下,您正在致电drawpad.coords(...)
。如果它返回零结果,则表示您尝试获取坐标的对象不存在。这意味着(a)您对某个对象有一个很好的引用但该对象已被删除,或者(b)您的引用是坏的。
您需要输入一些调试语句,以确保brick
(或x
)符合您的想法。您还需要确保在删除对象之前获得坐标,因为您无法获取已删除内容的坐标。