Pygame动态缩放图片后中心坐标失效,图片偏移至左上角的问题
Pygame缩放精灵后位置偏移的问题解决
问题出在每次缩放图片后,你没有同步更新精灵的rect属性。
当你调用pygame.transform.scale生成新的缩放图片时,新图片对应的rect默认是从左上角(0,0)开始的。你在__init__里设置的rect.center只对初始图片生效,缩放后旧的rect没有和新图片关联,导致绘制时用了新图片默认的左上角位置。
解决方法很简单,在update方法里缩放图片后,重新设置rect并保持中心位置不变:
修改Fireball类的update方法:
def update(self): self.w += 2 self.h += 2 # 先保存当前的中心坐标 current_center = self.rect.center # 缩放图片 self.image = pygame.transform.scale(self.img,(int(self.w),int(self.h))) # 更新rect为新图片的尺寸 self.rect = self.image.get_rect() # 把rect的中心恢复到之前的位置 self.rect.center = current_center self.image.set_alpha(10+ self.h * 5)
这样每次缩放后,精灵都会以原来的中心(300,300)为基准放大,不会跑到左上角了。
内容的提问来源于stack exchange,提问作者Joachim
相关产品推荐
相关产品推荐

