Вы пропустили обновление размера self.pixeltitlerect
после масштабирования Поверхности:
self.pixeltitle = pg.transform.scale(self.pixeltitle,(xsize,ysize))
# size of surface has been changed get the new rectangle
self.pixeltitlerect = self.pixeltitle.get_rect()
self.pixeltitlerect.center = (250,120)
self.screen.blit(self.pixeltitle,self.pixeltitlerect)
Или даже короче (см. pygame.Surface.get_rect()
):
self.pixeltitle = pg.transform.scale(self.pixeltitle,(xsize,ysize))
self.pixeltitlerect = self.pixeltitle.get_rect(center = (250,120))
self.screen.blit(self.pixeltitle,self.pixeltitlerect)
Не масштабировать исходную поверхность. Если исходная поверхность масштабируется, она искажается. Сохраните исходное изображение self.pixeltitleorig
и масштабируйте исходное изображение:
self.pixeltitle = pygame.transform.scale(self.pixeltitleorig,(xsize,ysize))
См. Пример:
import pygame
pygame.init()
window = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
class ScalingSurface:
def __init__(self):
name = self.dir_path + "pixeltitle.png"
self.pixeltitleorig = pg.image.load(name)
self.pixeltitle = self.pixeltitleorig
self.pixeltitlesize = self.pixeltitle.get_size()
self.pixeltitlerect = self.pixeltitle.get_rect()
self.pixeltitlerect.center = (250,120)
self.mode = 'grow'
self.grow = 0
def update(self):
if self.grow > 40:
self.mode = 'shrink'
if self.grow<1:
self.mode = 'grow'
self.grow += 1 if self.mode == 'grow' else -1
xsize = self.pixeltitlesize[0] + round(self.grow)
ysize = self.pixeltitlesize[1] + round(self.grow)
self.pixeltitle = pygame.transform.scale(self.pixeltitleorig,(xsize,ysize))
self.pixeltitlerect = self.pixeltitle.get_rect(center = (250,120))
def draw(self, surf):
surf.blit(self.pixeltitle,self.pixeltitlerect)
img = ScalingSurface()
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill(0)
img.update()
img.draw(window)
pygame.display.flip()