我是 pygame 的新手,正在开发我的第一款游戏。 (很抱歉,如果我问了一个愚蠢的问题) 我试图让游戏的标题像一种呼吸效果一样缓慢增大和减小尺寸,以使主屏幕在视觉上更具吸引力。
这是我必须导入图像的内容:
name = self.dir_path + "pixeltitle.png"
self.pixeltitle = pg.image.load(name)
self.pixeltitlerect = self.pixeltitle.get_rect()
self.pixeltitlerect.center = (250,120)
self.screen.blit(self.pixeltitle,self.pixeltitlerect)
我有一个 while 循环,在这个循环中我增加了矩形的大小,但是它向右和向下移动。有什么办法可以增加尺寸并让矩形的中心保持在同一个地方?还有没有办法使尺寸的增加/减少更平滑?这是代码的其余部分:
clicked = False
grow = 0
mode = 'grow'
while not clicked:
if grow>40:
mode = 'shrink'
if grow<1:
mode = 'grow'
self.pixeltitle = pg.transform.scale(self.pixeltitle,(400,400))
if mode == 'grow':
grow+=1
else:
grow-=1
xsize=400+int(grow)
ysize=400+int(grow)
self.pixeltitle = pg.transform.scale(self.pixeltitle,(xsize,ysize))
self.pixeltitlerect.center = (250,120)
self.screen.blit(self.pixeltitle,self.pixeltitlerect)
pg.display.flip()
你错过了在 Surface 缩放后更新
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)
不要缩放原来的Surface。如果缩放原始表面,它会变形。保留原图
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 = "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()