打开Variab的坐标

2024-10-01 22:42:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: oriflengthx1x2overlapbricky1
2条回答

在移除对象之前获取坐标:

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

“ValueError:需要0个以上的值才能解包”表示您正在执行以下操作,但函数未返回任何结果:

a,b,c,d = function(...)

您要求python“解包”函数的结果,并将结果分布在四个变量上。这要求函数实际返回四个值。错误消息告诉您它返回零项。所以这个错误的根本原因是你错误的假设函数总是返回四个值。你知道吗

在您的情况下,您正在呼叫drawpad.coords(...)。如果它返回的结果为零,则意味着您试图获取其坐标的对象不存在。这意味着(a)你对一个对象有一个很好的引用,但该对象已被删除,或者(b)你的引用不好。你知道吗

您需要放入一些调试语句以确保brick(或x)是您所认为的。您还需要确保在删除对象之前获得坐标,因为无法获得已删除对象的坐标。你知道吗

相关问题 更多 >

    热门问题