如何在图片使用pygame的set_alpha()(how to use pygame set_al

2019-06-27 18:36发布

我使用pygame的和Python的项目我建设,我很为构建游戏时首先打开一个启动画面。 我有我想要显示溅射屏幕.png文件,并决定从黑色淡入淡出它。 我发现做到这一点的最好办法是用一组阿尔法块传输的图像。 我做了这个代码,但它运行非常缓慢(在程序挂起30秒),并没有给出一个字母。 只显示画面在屏幕上。 我究竟做错了什么?

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

Answer 1:

你可能有(除了什么猴子说)的另一个问题是,你可能需要使用surface.convert()将图像转换为其中阿尔法是可以改变的一种形式。 你可以做以下任一操作。

image = pygame.image.load("logo.png")
image = image.convert()

要么

image = pygame.image.load("logo.png").convert()

我发现,虽然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()

在我testings,图像褪色1在正常,但像2呆在黑暗的全部时间。 你应该自己尝试; 你的电脑可能会有所改变。

如果surface.convert_alpha()不为你工作,你应该使用它,否则,做什么,我之前说的。 这应该解决您的问题。

你也应该注意,我用pygame.time.delay(20)而不是像2000你面前了。 如果你是在一个incraments增加阿尔法2000将是一个有点太长了。



Answer 2:

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

要淡入淡出,你需要不断循环,直到玩家点击/点击一个按钮。 像这样:

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)


Answer 3:

PygameNerd您的例子是接近,但它并没有真正发挥作用。

该image.convert()将正常褪色,但它不支持Alpha通道。 尝试在一个非黑色的背景和它显示。 该image.convert_alpha()不会褪色,但alpha通道没有正常工作。

我很惊讶,pygame的不支持此开箱即用,但无论如何。 这里有一个答案: http://www.nerdparadise.com/tech/python/pygame/blitopacity/

它有点复杂,但能正常工作。 透明的背景&衰落在一个包。



文章来源: how to use pygame set_alpha() on a picture