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
相关产品推荐
相关产品推荐

