pygame:ValueError:太多值无法解包(预期2)

时间:2020-06-13 16:32:07

标签: python pygame

我目前正在研究Python和pygame,试图为射击游戏进行示例仿真。

通常,在处理导弹或子弹投射时,我听说使用列表是控制移动的最常用方法。

喜欢

missile = []
missile1X = fighterx + fighterWidth
missile1Y = fightery + fighterHeight / 2
missile.append([missile1X, missile1Y])

我正在尝试添加有关“子弹”之类的子弹的其他信息,但只会导致

ValueError: too many values to unpack(expected 2).

这就是我正在尝试做的事情:添加有关列表元素的更多信息,我想更改战斗机使用的武器类型。

下面的代码是我认为可以工作的...

missile1 = pygame.image.load('missile1.png')
missile2 = pygame.image.load('missile2.png')
missileX = 100
missileY = 100
if weapon_num % 2 == 1:
    missile = missile1
if weapon_num % 2 == 0:
    missile = missile2
missileXY.append([missile1X, missile1Y, missile])

问题是

  1. 是否可以像上面那样放置另外一个?

  2. 还有其他方法可以执行我想要的吗?

  3. 我可能还要面对其他警告吗?

1 个答案:

答案 0 :(得分:0)

正如例外所述,将列表拆箱存在问题。内部列表中只应包含两个元素,但您要提供三个。如this section of the Python documentation的最后一段所述:

序列解压缩要求等号左侧的变量与序列中的元素一样多。

在这行代码中...

for bx, by in missile1XY:

...您正试图解压缩内部列表(在本例中为[missile1X, missile1Y, missile],其中包含三个元素)。解释器希望该列表恰好包含两个元素,因此会引发异常。

是否可以像上面那样放置另外一个?

是的,您只需要修改解压缩列表的代码即可,例如:

for bx, by, type in missile1XY:
    drawObject(type, bx, by)

还有其他方法可以执行我想要的吗?

如果需要,从理论上讲,您可以按照迭代顶部列表的方式迭代内部列表。这样,您就可以接受任意数量的元素,但是这需要对程序逻辑进行进一步的更改,并且我相信这会使事情变得比任何事情都复杂。

我可能还会遇到其他警告吗?

我建议您仔细阅读data structures上的Python文档。另外,如果您在学习时从其他地方获取代码,则在使用它之前尝试完全阅读并理解它是一个好习惯-尝试解决意外行为时可能会让您头疼。祝你学习顺利!