我正在关注有关如何在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
答案 0 :(得分:0)
除了您的错误消息没有指向您粘贴的代码(def scale
与def 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。如果说明不正确/过旧,则应告知或指示他们。