Создание полупрозрачного фонового экрана паузы в Pygame - PullRequest
1 голос
/ 31 января 2020

Мне было интересно, сможет ли кто-нибудь помочь мне с моей проблемой. В настоящее время я хочу отображать экран паузы каждый раз, когда нажимается определенная клавиша, что происходит, однако полученный экран всегда либо полностью прозрачен, либо непрозрачен, и мне было интересно узнать, можно ли каким-либо образом настроить следующий код в чтобы сделать эту мечту реальностью.

Вот как называется экран паузы:

if event.key == pygame.K_p:

                    notPaused = False
                    #print("Obtained")
                    pause = Pause(self.pauseScreen)
                    while notPaused == False:
                        #print("Received")

                        notPaused = pause.processEvents()
                        print(str(notPaused))
                        pause.displayFrame(self.pauseScreen)

                        clock = pygame.time.Clock()

                        clock.tick(60)

А вот как отображается экран паузы:

screen.fill(constants.BLACK)
        font = pygame.font.SysFont("serif", 25)

        for counter in range(1,5):

            text = font.render(self.options[counter-1], True, constants.WHITE)
            center_x = 150
            center_y = (counter * 120) - (text.get_height() // 2) + (self.pointer.image.get_height() // 2)
            screen.blit(text, [center_x, center_y])

        self.active_sprite_list.draw(screen)

        pygame.display.flip()

И для тех, кто интересуется, я иногда пытаюсь использовать BLACK для ABLACK, используя значения RGBA: (0,0,0,125)

Наконец, именно здесь инициализируется экран для экрана паузы:

self.size = [constants.SCREEN_WIDTH, constants.SCREEN_HEIGHT]
self.pauseScreen = pygame.Surface(self.size,pygame.SRCALPHA,32)

Любая помощь приветствуется.

1 Ответ

1 голос
/ 31 января 2020

Вы должны создать экран паузы как отдельную поверхность. Эта команда: screen.fill(constants.BLACK) почти гарантирует, что вы никогда не получите 50% прозрачности (поскольку все, что было на вашем экране ранее, было закрашено черным).

Создайте новую поверхность для экрана паузы, залейте ее черным цветом, добавьте текст; затем используйте что-то вроде my_pause_surface.set_alpha(128), чтобы сделать всю поверхность прозрачной на 50%, а затем скопируйте ее поверх остальной части вашей игры.

Вот еще одна полезная информация в другом вопросе: Нарисуйте прозрачный прямоугольник в пигме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...