You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Python类实例使用了错误的坐标值?

问题分析与解决

你的代码问题核心在于绘制时机错误和类的职责设计不当,具体问题和修正方案如下:

问题根源

  1. 你在类的__init__方法里直接执行了Screen.blit,这只会在创建类实例的瞬间,用默认的Tx=0、Ty=0绘制一次图像。之后修改TMTC.Tx和Ty的值时,不会触发重新绘制,自然看不到坐标更新后的效果。
  2. 类没有封装绘制行为,导致无法在主循环中重复调用、使用最新的坐标值绘制图像。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:50:23