首页 > 解决方案 > Pygame:平滑的图片分离

问题描述

有人可以帮我吗?:

我尝试制作一个在用户屏幕上流畅显示的标题:

def image(name,x,y,u):
   screen.blit(name,(x,y))
   if u = 1
      pygame.display.update()

Window == 'main'
While windows = 'main':
   image(background,0,0)
   image(title, 640, 120)
   pygame.display.update()

但是文本突然出现,而不是我想要的......

标签: pythonpygamepython-3.7pygame-surface

解决方案


pygame.Surface.blit()已经做了你想要的。它将一个表面弯曲到另一个表面,这取决于它的 Alpha 通道。您所要做的就是通过以下方式设置 Alpha 通道pygame.Surface.set_alpha()

image.set_alpha(min(1.0,alpha)*255)

编写一个函数,将表面“混合”到屏幕上。在下面的函数BlendSurface中,参数alpha是范围[0, 1]内的表面的不透明度值。0.0 将生成一个完全透明(不可见)的表面。1.0 将生成一个完全不透明的表面:

def BlendSurface(image, pos, alpha):
    image.set_alpha(min(1.0,alpha)*255)
    screen.blit(image, pos)

查看简单的演示程序:

import pygame
import pygame.font
pygame.init()

BLUE    = (  0,   0, 255)
YELLOW  = (255, 255,   0)

size = (800,600)
screen = pygame.display.set_mode(size)

def BlendSurface(image, pos, alpha):
    image.set_alpha(min(1.0,alpha)*255)
    screen.blit(blendImage, pos)

clock = pygame.time.Clock()

font = pygame.font.SysFont('Times New Roman', 100)
text = font.render('blend text', False, YELLOW)

i = 0
done = False
while not done:
    clock.tick(60)
    i += 1
    if i > 200:
        i = 0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    screen.fill(BLUE)
    BlendSurface(text, (100, 100), i/200) 
    pygame.display.flip()

推荐阅读