为什么我的Python类实例使用了错误的坐标值?
问题分析与解决
你的代码问题核心在于绘制时机错误和类的职责设计不当,具体问题和修正方案如下:
问题根源
- 你在类的
__init__方法里直接执行了Screen.blit,这只会在创建类实例的瞬间,用默认的Tx=0、Ty=0绘制一次图像。之后修改TMTC.Tx和Ty的值时,不会触发重新绘制,自然看不到坐标更新后的效果。 - 类没有封装绘制行为,导致无法在主循环中重复调用、使用最新的坐标值绘制图像。
修正后的代码
import pygame pygame.init() Screen = pygame.display.set_mode((800, 400)) TC = pygame.image.load("TC.png").convert_alpha() ANUM = 0 class MTC(): def __init__(self): self.Tx = 0 self.Ty = 0 # 新增专门的绘制方法,封装图像绘制逻辑 def draw(self): Screen.blit(TC, (self.Tx, self.Ty)) TMTC = MTC() # 改成屏幕可见范围内的坐标(原800,800超出屏幕,图像会完全看不到) TMTC.Tx = 400 TMTC.Ty = 200 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 避免pygame退出后代码继续执行报错 Screen.fill((0, 0, 0)) # 每次循环清空屏幕,防止图像残留 TMTC.draw() # 在主循环调用绘制方法,使用最新的坐标值 pygame.display.update()
关键修改说明
- 给
MTC类新增draw方法,将图像绘制逻辑移至此处,每次调用都会使用当前的Tx和Ty值绘制。 - 主循环中先清空屏幕(
Screen.fill),避免之前绘制的图像残留。 - 调整坐标为屏幕可见范围内的数值,同时在退出事件中添加
exit(),防止pygame退出后代码报错。
内容的提问来源于stack exchange,提问作者user19934942
相关产品推荐
相关产品推荐

