如何使用pygame Python使表面/图像每秒闪烁2次

时间:2013-11-08 03:53:34

标签: python graphics pygame

最近尝试使用pygame并遇到了alpha不透明度。如何调整alpha范围以使我的图像/表面每秒闪烁两次?

目前我以每秒30帧的速度绘制它。

def blit_image(self):
        for alpha in range(0,255,50):
            for i in self.image_array:
                a = i.set_alpha(alpha)
                i.draw_on(self.screen)
        pygame.display.flip()

这里的东西不对,它只是让我的图像的边框不透明,我无法看到眨眼是否真的发生了。有关如何做到这一点的想法吗?

1 个答案:

答案 0 :(得分:1)

简要说明:(您的代码)您每秒有30帧(30FPS),因此每帧减少alpha +1/15 * 255,15帧后增加alpha -1/15 * 255,15帧后再次减少等等。

这是如何闪烁背景颜色的完整示例(这是SO上的类似问题的答案)。 你所做的并非如此,但也许它可以帮到你。

import pygame

#----------------------------------------------------------------------

class Background():

    def __init__(self, screen):
        self.screen = screen

        self.timer = 0
        self.color = 0
        self.up = True # up or down

    #-------------------

    def change(self):

        if self.timer == 15: # 15 frames for UP and 15 frames for DOWN
            self.timer = 0
            self.up = not self.up

        self.timer += 1

        if self.up:
            self.color += 10
        else:
            self.color -= 10

        print self.up, self.color

    #-------------------

    def draw(self):
        self.screen.fill( (self.color, self.color, self.color) )

#----------------------------------------------------------------------

class Game():

    def __init__(self):
        pygame.init()

        self.screen = pygame.display.set_mode((800,600))

        self.background = Background(self.screen)

    #-------------------

    def run(self):

        clock = pygame.time.Clock()

        RUNNING = True

        while RUNNING:

            # ----- events -----

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    RUNNING = False
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        RUNNING = False

            # ----- changes -----

            self.background.change()

            # ----- draws ------

            self.background.draw()

            pygame.display.update()

            # ----- FPS -----

            clock.tick(30)

        #-------------------

        pygame.quit()

#----------------------------------------------------------------------

Game().run()