有人可以帮我在这? :
我尽量让这顺利出现在用户屏幕上的标题:
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()
但文字突然不出现,我想...
你想使用的透明度,并pygame的使用three different types:
有三种类型的透明度pygame的支持:colorkeys,表面阿尔法和像素阿尔法。表面阿尔法可以与colorkeys混合,但是每个像素的阿尔法图像不能使用其它模式。 colorkey的透明度使得单个颜色值是透明的。任何匹配colorkey的像素不会绘制。表面α值是改变整个图像的透明度的单个值。的255的表面的α是不透明的,为0的值是完全透明的。
每像素,因为它们存储每个像素的透明度值的阿尔法是不同的。这允许最精确的透明效果,但它也是最慢的。每像素的阿尔法不能与表面α和colorkeys混合。
因此,让我们用色键来创建一个透明Surface
和的blit一些文字,然后用表面阿尔法通过调用set_alpha
和Surface
创建淡入效果:
import pygame
def main():
screen = pygame.display.set_mode((300, 100))
FONT = pygame.font.SysFont(None, 64)
text = FONT.render('Hello World', False, pygame.Color('darkorange'))
surf = pygame.Surface(text.get_rect().size)
surf.set_colorkey((1,1,1))
surf.fill((1,1,1))
surf.blit(text, (0, 0))
clock = pygame.time.Clock()
alpha = 0
while True:
for e in pygame.event.get():
if e.type == pygame.QUIT:
return
alpha = (alpha + 1) % 256
surf.set_alpha(alpha)
screen.fill(pygame.Color('dodgerblue'))
screen.blit(surf, (20, 20))
clock.tick(120)
print(alpha)
pygame.display.update()
if __name__ == '__main__':
pygame.init()
main()
pygame.Surface.blit()
已经做你想要什么。它弯曲的表面到另一表面,取决于其alpha通道。所有你需要做的就是通过pygame.Surface.set_alpha()
设置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()