pygame:流畅的图片分配

时间:2019-02-08 13:39:08

标签: python pygame python-3.7 pygame-surface

有人可以帮我吗? :

我试图使标题在用户屏幕上流畅显示:

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

但是发短信突然出现了,而不是我想要的...

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

您想使用透明度,而pygame使用three different types

  

pygame支持三种类型的透明度:色键,表面alpha和像素alpha。表面Alpha可以与色键混合,但是具有每像素Alpha的图像不能使用其他模式。 Colorkey透明性使单个颜色值透明。与色键匹配的任何像素都不会绘制。表面Alpha值是一个可更改整个图像透明度的单个值。 255的表面alpha是不透明的,0的值是完全透明的。

     

每个像素的Alpha不同,因为它们存储每个像素的透明度值。这样可以实现最精确的透明效果,但速度也最慢。每个像素的Alpha不能与表面Alpha和色键混合。

因此,让我们使用colorkey创建一个透明的Surface并为其添加一些文本,然后使用表面alpha通过调用set_alphaSurface创建淡入效果:< / p>

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