有人可以帮我吗? :
我试图使标题在用户屏幕上流畅显示:
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()
但是发短信突然出现了,而不是我想要的...
答案 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_alpha
和Surface
创建淡入效果:< / 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()