Ben*_*abe 3 python pygame splash-screen
我正在为我正在构建的项目使用pygame和python,并且我正在为游戏首次打开时构建一个启动画面.我有一个.png,我想为启动画面显示,并决定从黑色淡入淡出.我发现这样做的最好方法是使用一组alpha进行blitting.我制作了这段代码,但它运行得非常慢(程序挂起30秒)并且没有给出alpha.仅在屏幕上显示图片.我究竟做错了什么?
screen = pygame.display.set_mode([1066,600])
#Drawable surface
background = pygame.Surface(screen.get_size())
#Used for converting color maps
background = background.convert()
#Splashscreen
#image fades in
for i in range (225):
background.fill((0,0,0))
image = pygame.image.load("logo.png")
image.set_alpha(i)
logoimage = screen.blit(image,(0,0))
pygame.display.flip()
pygame.time.delay(2000)
#image fades out
#goes on to display main menu
Run Code Online (Sandbox Code Playgroud)
您可能遇到的另一个问题(除了猴子所说的)是您可能需要使用surface.convert()哪个将图像转换为可以更改alpha的形式.您可以执行以下任一操作.
image = pygame.image.load("logo.png")
image = image.convert()
Run Code Online (Sandbox Code Playgroud)
要么
image = pygame.image.load("logo.png").convert()
Run Code Online (Sandbox Code Playgroud)
我发现,虽然surface.convert_alpha()应该做同样的事情,但它通常不起作用.试试这个测试代码来检查.
import pygame, sys
pygame.init()
window=pygame.display.set_mode((1500, 800))
background=pygame.Surface((window.get_rect().width, window.get_rect().height))
background.fill((0, 0, 0))
image=pygame.image.load('InsertImageHere.png')
image=image.convert()
image2=pygame.image.load('InsertImage2Here.png')
image2=image2.convert_alpha()
rect=image.get_rect()
rect2=image2.get_rect()
rect2.left=rect.width+1
i=1
while True:
for event in pygame.event.get():
if event.type==12:
pygame.quit()
sys.exit()
image.set_alpha(i)
image2.set_alpha(i)
window.fill((255, 255, 255))
window.blit(background, background.get_rect())
window.blit(image, rect)
window.blit(image2, rect2)
pygame.time.delay(20)
i+=1
if i==255:
i=1
pygame.display.update()
Run Code Online (Sandbox Code Playgroud)
在我的测试中,图像1正常消失,但图像2一直保持黑暗.你应该亲自尝试一下; 您的计算机可能以不同的方
如果surface.convert_alpha()适合你,你应该使用它,否则,做我之前说过的话.这应该可以解决您的问题.
你还应该注意我使用的pygame.time.delay(20)不是你以前的2000.如果你增加一个字母的alpha值,那2000年会有点太长.
[1] 您不想每次迭代都加载图像。因为创建一个新的表面是一个缓慢的操作。[2] 你的循环绘制 225 次,然后在最后一次迭代之后,等待 2000 毫秒。
你要:
image = pygame.image.load("logo.png")
for i in range (225):
background.fill((0,0,0))
image.set_alpha(i)
screen.blit(image,(0,0))
pygame.display.flip()
pygame.time.delay(20)
Run Code Online (Sandbox Code Playgroud)
要淡入淡出,您需要一直循环播放直到玩家点击/点击按钮。像这样:
import pygame
from pygame.locals import *
# ...
def title_loop():
# title screen main loop
image = pygame.image.load("logo.png")
done = False
alpha = 0
alpha_vel = 1
# fade alpha in-out while waiting
while not done:
# get key input
for event in pygame.event.get():
if event.type == QUIT:
done = true
if event.type == KEYDOWN:
if event.key = K_ESCAPE:
done = true
# draw
if alpha >= 255 or alpha <= 0:
alpha_vel *= -1
alpha += alpha_vel
background.fill((0,0,0))
image.set_alpha(i)
screen.blit(image,(0,0))
pygame.display.flip()
pygame.time.delay(20)
Run Code Online (Sandbox Code Playgroud)