Устаревший код из учебника.Не могу понять это - PullRequest
0 голосов
/ 29 марта 2019

Я читал урок о том, как 3D-рендеринг объектов в Pygame.Однако кажется, что код устарел, и я не знаю, как это исправить.

Я потратил довольно много времени на поиски решения, но безрезультатно, так как не знаюто, что я ищу.

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)

Предполагается показать мне игровое окно с кубом, по которому я могу перемещаться и тому подобное, но вместо этого оно выдает мне ошибку.

1 Ответ

0 голосов
/ 29 марта 2019

Кроме того, что ваше сообщение об ошибке не указывает на вставленный вами код (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.Они должны быть осведомлены или проинструктированы, если инструкции устарели / устарели.

...