有没有办法在命令pygame.transform.scale()中输入小数?

时间:2019-07-14 15:00:57

标签: python pygame

我需要使用pygame.trasnform.scale()命令缩放子画面图像,尽管我需要精确的尺寸,这只能通过使用小数来实现。不幸的是,pygame表示此输入不支持浮点数,仅支持整数。我想知道是否有任何方法可以在该命令中输入小数,或者还有另一种命令可以完全精确地缩放精灵

我要做的主要事情是将我想输入的浮点数转换为整数,但是随后它会自动将其四舍五入为最接近的整数,从而有效地删除了我需要的精确比例。

class Player_2_skin(pygame.sprite.Sprite):
def __init__(self, game, x, y):
    self.groups = game.skins
    pygame.sprite.Sprite.__init__(self, self.groups)
    self.game = game
    self.x = x
    self.y = y
    self.image = pygame.image.load(os.path.join(A_folder, "b.png")).convert()
    self.image.set_colorkey((255, 0, 0))
    self.image = pygame.transform.scale(self.image, (int(152.5 /1.7), int(215/1.7)))
    self.rect = self.image.get_rect()
    self.changex = int(152.5 /1.7) / 63
    self.changey = int(215/1.7) / 126

def update(self):
    self.rect.x = A.P2.pos2.x - 100
    self.rect.y = A.P2.pos2.y

    x = A.P2.pos2.x * self.changex
    y = A.P2.pos2.y * self.changey

    self.image = pygame.transform.scale(self.image, (x, y))

我希望我能够用一个数字来缩放精灵,包括一个小数。尽管在运行它时,我收到错误消息“期望整数参数,但出现浮点数”

1 个答案:

答案 0 :(得分:0)

传递给pygame.transform.scalepygame.transform.smoothscale()的大小必须是整数,因为不可能画出像素(碎片)的一部分或定义pygame.Surface具有非整数的大小。因此目标宽度和高度必须是整数个像素。

但是,尽管int()截断了浮点数的小数部分,而round()却截取了最接近的整数。
请注意,pygame.transform.smoothscale()会平滑缩放表面的像素,并且不会产生斑点现象。例如:

self.image = pygame.transform.smoothscale(self.image, (round(152.5/1.7), round(215/1.7)))