Answer the question
In order to leave comments, you need to log in
Black screen and no pygame start button visible. How to fix it?
Hello. I'm trying to write my first game using pygame and I ran into this problem. Black screen on startup, as shown in the picture. When you click on the highlighted place, the game starts, because. there is a button.
Here are the code snippets
Button Code
import pygame.font
class Button:
def __init__(self, ai_settings, screen, msg):
"""Инициализирует атрибуты кнопки"""
self.screen = screen
self.screen_rect = screen.get_rect()
# назначение размеров и свойств кнопки
self.width, self.height = 200, 50
self.button_color = (0, 255, 0)
self.text_color = (255, 255, 255)
self.font = pygame.font.SysFont("Verdana", 48)
# построение объекта rect кнопки и выравнивание по центру экрана
self.rect = pygame.Rect(0, 0, self.width, self.height)
self.rect.center = self.screen_rect.center
# сообщение кнопки создаётся только один раз
self.prep_msg(msg)
def prep_msg(self, msg):
"""
Преобразует msg в прямоугольник и выравнивает текст по центру
"""
self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)
self.msg_image_rect = self.msg_image.get_rect()
self.msg_image_rect.center = self.rect.center
def draw_button(self):
"""Отображение пустой кнопки и вывод сообщения"""
self.screen.fill(self.button_color, self.rect)
self.screen.blit(self.msg_image, self.msg_image_rect)
def check_events(ai_settings, screen, stats, play_button, ship, aliens, bullets):
"""
Обрабатывает нажатия клавиш и события мыши
"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, ai_settings, screen, ship, bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event, ship)
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_x, mouse_y = pygame.mouse.get_pos()
check_play_button(ai_settings, screen, stats, play_button, ship,
aliens, bullets, mouse_x, mouse_y)
def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,
bullets, mouse_x, mouse_y):
"""Запускает новую игру при нажатии кнопки Play"""
if play_button.rect.collidepoint(mouse_x, mouse_y):
# сброс игровой статистики
stats.reset_stats()
stats.game_active = True
# очистка списков пришельцев и пуль
aliens.empty()
bullets.empty()
# создание нового флота и размещение корабля в центре
create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
def update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button):
"""
Обновляет изображение на экране и
отображает новый экран
"""
# При каждом проходе цикла перерисовывается экран
screen.fill(ai_settings.bg_color)
# Все пули выводятся позади изображений корабля пришельцев
for bullet in bullets.sprites():
bullet.draw_bullet()
ship.blitme()
aliens.draw(screen)
# Кнопка Play отображается в том случае, если игра неактивна
if not stats.game_active:
play_button.draw_button()
# Отображение последнего прорисованного экрана
pygame.display.flip()
# Игра запускается в неактивном состоянии
self.game_active = False
Answer the question
In order to leave comments, you need to log in
Solution found. You just need to slightly change the while
while True:
gf.check_events(ai_settings, screen, stats, play_button,
ship, aliens, bullets)
if stats.game_active:
ship.update()
gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets)
gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button)
# ниже вносимые изменения
else:
gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question