Pygame缩放精灵

10

如何将精灵的图像缩放为更大或更小?我可以更改矩形,但不能更改图像。

代码:(虽然我不确定您为什么需要它)

class test(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("testImage.png").convert()
        self.image.set_colorkey((255,255,255))
        self.rect = self.image.get_rect()
4个回答

10
你尝试过吗?
pygame.transform.scale()

官方文档指出,您应该使用以下语法:
scale(Surface, (width, height), DestSurface = None) -> Surface

1
类型错误:必须是pygame.Surface,而不是None。 - Charles Noon
1
你是如何引用它的? - Aidan
2
self.image = pygame.image.load("testImage.png").convert() self.image.set_colorkey((255,255,255)) pygame.transform.scale(self.image, (9999, 99999), None) 文档说明称DestSurface是可选的。 - Charles Noon
尝试使用pygame.transform.scale(self.image,(999,999))对self.image进行缩放。 - Aidan
你在调整大小后重新绘制图像吗?通常情况下,你需要将图像绘制到表面上,调整大小,清除屏幕(可选),然后重新绘制屏幕(我相信是使用pygame.display.flip()函数)。 - Aidan
使用 (your_screen).blit。 - macfij

5

阅读pygame的变换模块:http://www.pygame.org/docs/ref/transform.html

class test(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("testImage.png").convert()
        self.image.set_colorkey((255,255,255))
        # return a width and height of an image
        self.size = self.image.get_size()
        # create a 2x bigger image than self.image
        self.bigger_img = pygame.transform.scale(self.image, (int(self.size[0]*2), int(self.size[1]*2)))
        # draw bigger image to screen at x=100 y=100 position
        self.screen.blit(self.bigger_img, [100,100])

3
如果你想在pygame中缩放一张图片,你可以使用pygame.transform.scale(image, (size, size))函数。例如:
image1_not_scaled = pygame.image.load('path_of_the_file')
image1 = pygame.transform.scale(image1_not_scaled, (64, 64))

[...]

screen.blit(image1, (0, 0))

举个例子,你可以这样写:

class test(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("testImage.png").convert()
        self.image.set_colorkey((255,255,255))
        self.image_scaled = pygame.image.load(self.image, (size, size))
        self.rect = self.image_scaled.get_rect()

1
刚刚创建了一个账户来分享我的解决方案,因为我自己也遇到了这个问题。 为了提供一些背景,我正在运行一个Player()类来处理玩家的精灵、移动和碰撞。在init方法中,我正在使用以下代码:
self.image = self.sprites_idle[self.current_sprite] # 将图像设置到变量中
self.rect = self.image.get_rect(topleft = pos) # 设置图像的rect属性
其中,current_sprite是一个变量,用于循环索引精灵以创建动画效果,其余部分都比较简单。起初,我尝试在每次蹲下或站起来更新图像后,使用以下代码更新rect:
self.rect = self.image.get_rect()
但是,我发现更新rect()不起作用,因为它会不断重置x、y以及w、h(因此每次循环迭代时都会将玩家传送到起始位置,每秒60次,这意味着我们无法移出起始位置)。如果这是您的问题,则请执行以下操作:
解决方案如下:
self.image = self.sprites_idle[self.current_sprite]
self.rect.height = self.image.get_height()
只需更新高度,程序就可以按预期运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接