我需要使用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))
我希望我能够用一个数字来缩放精灵,包括一个小数。尽管在运行它时,我收到错误消息“期望整数参数,但出现浮点数”
答案 0 :(得分:0)
传递给pygame.transform.scale
或pygame.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)))