在主循环中缩放精灵
Scaling a sprite in main loop
我想创建一个游戏,其中圆圈在表面上随机生成并开始增长。当 2 个圆圈相互接触时,游戏结束。因此,除了在循环期间调整精灵的大小外,一切正常。当我使用 transform.scale
时,我得到这样的结果:
然后我在文档中找到了transform.smoothscale
。我改变了我的代码来使用它然后它看起来像这样:
我也尝试使用 Rect.inflate
但这对我的精灵没有任何作用。我尝试了 Rect.infalte_ip
,如果我使用它,精灵不会长大,它更有可能移出框架。关于如何使这些 Sprite 就地生长以及它们应该如何调整大小有什么想法吗?
class Bubbles(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image_scale = 100
self.image_scale_factor = 1
self.image = resources.BUBBLE_SKIN[0].convert_alpha()
self.image = pygame.transform.scale(self.image, (self.image_scale, self.image_scale))
self.rect = self.image.get_rect()
self.rect.centerx = (random.randrange(Settings.object_range_limit + (self.image_scale//2), (Settings.width - Settings.object_range_limit - self.image_scale)))
self.rect.centery = (random.randrange(Settings.object_range_limit + (self.image_scale//2), (Settings.height - Settings.object_range_limit - self.image_scale)))
self.growth_rate = random.randint(1, 4)
def update(self):
self.image_scale += self.growth_rate
self.image = pygame.transform.scale(self.image, (self.image_scale, self.image_scale))
您必须缩放原始精灵,而不是逐渐缩放精灵。每次扩展冲刺时,质量都会下降。如果逐渐缩放精灵,质量会越来越差。将精灵存储到属性 orignal_image
并缩放 orignal_image
.
如果要按图像中心缩放图像,必须在使用新图像尺寸缩放图像后更新 rect
属性。
参见 How do I scale a PyGame image (Surface) with respect to its center?
class Bubbles(pygame.sprite.Sprite):
def __init__(self):
# [...]
self.image = resources.BUBBLE_SKIN[0].convert_alpha()
self.image = pygame.transform.scale(
self.image, (self.image_scale, self.image_scale))
self.original_image = self.image
def update(self):
self.image_scale += self.growth_rate
self.image = pygame.transform.scale(
self.original_image, (self.image_scale, self.image_scale))
self.rect = self.image.get_rect(center = self.rect.center)
我想创建一个游戏,其中圆圈在表面上随机生成并开始增长。当 2 个圆圈相互接触时,游戏结束。因此,除了在循环期间调整精灵的大小外,一切正常。当我使用 transform.scale
时,我得到这样的结果:
然后我在文档中找到了transform.smoothscale
。我改变了我的代码来使用它然后它看起来像这样:
我也尝试使用 Rect.inflate
但这对我的精灵没有任何作用。我尝试了 Rect.infalte_ip
,如果我使用它,精灵不会长大,它更有可能移出框架。关于如何使这些 Sprite 就地生长以及它们应该如何调整大小有什么想法吗?
class Bubbles(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image_scale = 100
self.image_scale_factor = 1
self.image = resources.BUBBLE_SKIN[0].convert_alpha()
self.image = pygame.transform.scale(self.image, (self.image_scale, self.image_scale))
self.rect = self.image.get_rect()
self.rect.centerx = (random.randrange(Settings.object_range_limit + (self.image_scale//2), (Settings.width - Settings.object_range_limit - self.image_scale)))
self.rect.centery = (random.randrange(Settings.object_range_limit + (self.image_scale//2), (Settings.height - Settings.object_range_limit - self.image_scale)))
self.growth_rate = random.randint(1, 4)
def update(self):
self.image_scale += self.growth_rate
self.image = pygame.transform.scale(self.image, (self.image_scale, self.image_scale))
您必须缩放原始精灵,而不是逐渐缩放精灵。每次扩展冲刺时,质量都会下降。如果逐渐缩放精灵,质量会越来越差。将精灵存储到属性 orignal_image
并缩放 orignal_image
.
如果要按图像中心缩放图像,必须在使用新图像尺寸缩放图像后更新 rect
属性。
参见 How do I scale a PyGame image (Surface) with respect to its center?
class Bubbles(pygame.sprite.Sprite):
def __init__(self):
# [...]
self.image = resources.BUBBLE_SKIN[0].convert_alpha()
self.image = pygame.transform.scale(
self.image, (self.image_scale, self.image_scale))
self.original_image = self.image
def update(self):
self.image_scale += self.growth_rate
self.image = pygame.transform.scale(
self.original_image, (self.image_scale, self.image_scale))
self.rect = self.image.get_rect(center = self.rect.center)