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

Pygame中Surface的topleft无法接收新元组值的问题解决

问题解决:Pygame中Surface的Rect位置不生效

问题根源

每次调用self.surface.get_rect()都会生成一个全新的Rect实例,这个临时Rect和Surface没有持久绑定关系。你修改这个临时对象的topleft值后,下次调用get_rect()依然会创建一个默认位置((0,0))的新Rect,所以之前的修改不会生效。

解决方法

把Rect对象保存为类的实例属性,后续直接操作这个属性即可,两种实现方式:

方式一:先创建Rect再设置位置

class MyClass:
    def __init__(self, pos):
        self.surface = pygame.Surface((100, 100))
        # 保存Rect为实例属性
        self.rect = self.surface.get_rect()
        self.rect.topleft = pos

        print(pos) # (10, 10)
        print(self.rect.topleft) # (10, 10)

方式二:创建Rect时直接指定位置

class MyClass:
    def __init__(self, pos):
        self.surface = pygame.Surface((100, 100))
        # 直接通过get_rect参数设置位置并保存
        self.rect = self.surface.get_rect(topleft=pos)

        print(pos) # (10, 10)
        print(self.rect.topleft) # (10, 10)

后续绘制提示

后续将Surface绘制到窗口时,直接传入保存的Rect对象即可:

screen.blit(mc.surface, mc.rect)

内容的提问来源于stack exchange,提问作者upcast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:55:24