Pygame程序报错:module 'pygame.math'无'Matrix44'属性求助
问题分析
报错的核心原因很明确:pygame.math模块从未提供过Matrix44类,你虽然安装并导入了pyrr库的Matrix44,但代码里依然在错误地调用pygame.math.Matrix44,这和你升级/重装库的操作无关。
解决步骤
你需要完全改用pyrr库的Matrix44实现,同时适配pyrr的API(和你代码里假设的pygame方法有差异):
1. 替换代码中的Matrix44调用
把所有pygame.math.Matrix44替换为直接使用Matrix44(因为已经从pyrr.matrix44导入),同时调整pyrr对应的方法:
- pyrr中创建透视投影矩阵用
create_perspective_projection_matrix函数 - 创建欧拉角旋转矩阵用
from_eulers(注意复数形式) - 创建平移矩阵用
from_translation
2. 适配Vector3类型转换
pyrr的矩阵方法需要接收pyrr的Vector类型,所以需要把pygame的Vector3转换为pyrr的Vector3。
修改后的完整代码
import pygame from pyrr import Matrix44, Vector3 # 直接导入pyrr的Vector3 from pygame.math import Vector3 as PygameVector3 # 重命名避免冲突 import math # 用于角度转弧度 class Camera: def __init__(self, position, fov=90): self.position = PygameVector3(*position) self.rotation = PygameVector3(0, 0, 0) self.fov = fov self.aspect_ratio = 1.0 self.near_clip = 0.1 self.far_clip = 100.0 def get_projection_matrix(self): # 使用pyrr的透视投影矩阵创建函数 return Matrix44.create_perspective_projection_matrix( self.fov, self.aspect_ratio, self.near_clip, self.far_clip ) def get_view_matrix(self): # 转换为pyrr的Vector3,pyrr默认使用弧度,这里将角度转换为弧度 pyrr_rotation = Vector3([ math.radians(self.rotation.x), math.radians(self.rotation.y), math.radians(self.rotation.z) ]) rotation = Matrix44.from_eulers(pyrr_rotation) # 转换位置为pyrr的Vector3并取反 pyrr_position = Vector3([self.position.x, self.position.y, self.position.z]) translation = Matrix44.from_translation(-pyrr_position) return rotation @ translation def move(self, direction): if direction == 'right': self.position.x += 1 elif direction == 'left': self.position.x -= 1 elif direction == 'up': self.position.y += 1 elif direction == 'down': self.position.y -= 1 elif direction == 'forward': self.position.z -= 1 elif direction == 'backward': self.position.z += 1 def rotate(self, axis, angle): # 直接存储角度,在生成矩阵时统一转换为弧度 setattr(self.rotation, axis, getattr(self.rotation, axis) + angle)
关键注意点
- pyrr的欧拉角默认使用弧度,代码中已经在生成旋转矩阵时将角度转换为弧度,无需修改
rotate方法的传参逻辑 - 若不需要保留pygame的Vector3,可以直接全程使用pyrr的Vector3,减少类型转换步骤
内容的提问来源于stack exchange,提问作者user20983853
相关产品推荐
相关产品推荐

