教程中的过时代码。无法弄清楚

时间:2019-03-29 16:06:20

标签: pygame python-3.7

我正在关注有关如何在pygame中3D渲染对象的教程。但是,似乎代码已过时,我不知道如何解决。

我花了很多时间来寻找解决方案,但无济于事,因为我不知道自己在寻找什么。

def rotateX(self, (cx,cy,cz), radians):
    for node in self.nodes:
        y      = node.y - cy
        z      = node.z - cz
        d      = math.hypot(y, z)
        theta  = math.atan2(y, z) + radians
        node.z = cz + d * math.cos(theta)
        node.y = cy + d * math.sin(theta)

应该向我展示一个带有可以移动的立方体的游戏窗口,但是却向我抛出错误。

Traceback (most recent call last):
  File "index.py", line 1, in <module>
    import wireframe
  File "C:\Users\elee4018\Desktop\Python\pyGame01\wireframe.py", line 34
    def scale(self, (centre_x, centre_y), scale):
                    ^
SyntaxError: invalid syntax

1 个答案:

答案 0 :(得分:0)

除了您的错误消息没有指向您粘贴的代码(def scaledef rotateX)以外,还有这样的事实。他们有同样的问题。

这是较旧的Python2语法。只需将其替换为rotateX(self, cx, cy, cz, radians)rotateX(self, axies, radians),然后在函数开始处添加一行执行cx, cy, cz = axies的行即可。无论哪种方式,Python3都默认情况下只是不进行元组扩展。至少不是这样。

所以也可以这样做:

def rotateX(self, cx, cy, cz, radians):
    for node in self.nodes:
        y      = node.y - cy
        z      = node.z - cz
        d      = math.hypot(y, z)
        theta  = math.atan2(y, z) + radians
        node.z = cz + d * math.cos(theta)
        node.y = cy + d * math.sin(theta)

并确保将调用更新为rotateX函数,或者可以执行以下操作:

def rotateX(self, axies, radians):
    cx, cy, cz = axies
    for node in self.nodes:
        y      = node.y - cy
        z      = node.z - cz
        d      = math.hypot(y, z)
        theta  = math.atan2(y, z) + radians
        node.z = cz + d * math.cos(theta)
        node.y = cy + d * math.sin(theta)

您无需以任何方式更新对该函数的调用。可能有一种更整洁的方式来完成与Python2相同的操作。但是我从来没有使用过它。但这至少可以解决您的问题。

哦,然后将问题报告提交给Pygame。如果说明不正确/过旧,则应告知或指示他们。