我正在尝试制作我的第一款游戏,它类似于与自行车的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 = []
答案 0 :(得分:9)
你的what_direction()
函数返回一个值元组,并且你试图将该元组传递给一个带有2个参数的函数。 Python认为你传递了一个参数(那个2元组)。在表达式Vector(what_direction())
中使用元组之前,需要解压缩元组。你可以自己做:
a, b = what_direction()
Vector(a, b)
或者你可以使用元组解包操作符*
:
Vector(*what_direction())
答案 1 :(得分:5)
你需要使用这样的星号:
self.velocity = Vector(*what_direction())
以便将两个组件传递给Vector
构造函数。目前你传递的是一个带有两个成员的元组的参数。星号解压缩元组,将其成员值作为单独的参数传递给Vector()
。