pygame的:画面流畅幽灵

问题描述 投票:0回答:2

有人可以帮我在这? :

我尽量让这顺利出现在用户屏幕上的标题:

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()

但文字突然不出现,我想...

python pygame python-3.7 pygame-surface
2个回答
1
投票

你想使用的透明度,并pygame的使用three different types

有三种类型的透明度pygame的支持:colorkeys,表面阿尔法和像素阿尔法。表面阿尔法可以与colorkeys混合,但是每个像素的阿尔法图像不能使用其它模式。 colorkey的透明度使得单个颜色值是透明的。任何匹配colorkey的像素不会绘制。表面α值是改变整个图像的透明度的单个值。的255的表面的α是不透明的,为0的值是完全透明的。

每像素,因为它们存储每个像素的透明度值的阿尔法是不同的。这允许最精确的透明效果,但它也是最慢的。每像素的阿尔法不能与表面α和colorkeys混合。

因此,让我们用色键来创建一个透明Surface和的blit一些文字,然后用表面阿尔法通过调用set_alphaSurface创建淡入效果:

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()

enter image description here


1
投票

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()
© www.soinside.com 2019 - 2024. All rights reserved.