解压缩变量坐标

时间:2014-12-03 21:23:45

标签: python tkinter coordinates collision-detection

所以在询问之前的碰撞检测后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

2 个答案:

答案 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)符合您的想法。您还需要确保在删除对象之前获得坐标,因为您无法获取已删除内容的坐标。