3

我正在尝试制作我的第一个游戏,它类似于带有自行车的 tron 游戏,到目前为止,我已经创建了一个自行车类和几个功能来提供帮助。但是,当它如下运行时,当我尝试使用速度声明 Bike 对象时出现错误,它表示:

类 Vector 正好采用三个参数,其中两个由 what_direction 函数给出。

这对我来说是个问题,因为我创建了一个用于改变方向的 2x2 矩阵和一个将矩阵乘以向量的函数。我能做些什么来解决这个错误?

   import random, math, pygame, sys

    class Vector(object):
        """ |x| = [0]
            |y| = [1] """
        def __init__(self, x, y):
            self.vec = [ x, y]

    def what_direction():  
        x = random.uniform(0.0, 5.0)
        y = math.sqrt(25-(x**2))
        return x, y

    class Bike(object):
        def __init__(self):
            self.position = [random.randint(0, 200), random.randint(0, 200)]
            self.velocity = Vector(what_direction())
            self.score = 0
            self.path_traveled = []
4

2 回答 2

9

您的what_direction()函数返回一个值元组,并且您试图将该元组传递给一个接受 2 个参数的函数。Python 认为您正在传递一个参数(即 2 元组)。在表达式中使用它之前,您需要解压缩元组Vector(what_direction())。您可以自己执行此操作:

a, b = what_direction()
Vector(a, b)

或者您可以使用元组解包运算符*

Vector(*what_direction())
于 2013-07-29T21:18:04.427 回答
5

您需要使用这样的星号:

self.velocity = Vector(*what_direction())

为了将这两个组件传递给Vector构造函数。当前,您正在传递一个参数,该参数是一个具有两个成员的元组。星号解包元组,将其成员值作为单独的参数传递给Vector().

于 2013-07-29T21:17:41.923 回答