Как кнопка может появиться на экране в Pygame - PullRequest
0 голосов
/ 30 октября 2019

Я изучаю Pygame и столкнулся с ошибкой. Я написал код кнопки и добавил функцию обновления экрана, а также написал функцию, которая запускает игру при нажатии на эту кнопку. Проблема в том, что вы можете нажать на место, где должна быть кнопка, и игра начнется, но кнопка не появится. Вот функции, которые имеют место в классе кнопок:

def prep_msg(self, msg): #takes place in __init__
    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)

А вот функция обновления экрана:

...
if stats.game_active == False: #responsible for whether the game works or not (False = doesn't works)
    play_button.draw_button()

what happens when the game is started pygame.display.flip()

Весь код:

def update_screen(custom_settings, screen, spaceship, 
    aliens, bullets, rockets, stars, background, play_button, stats):
    screen.fill(custom_settings.bg_color)
    screen.blit(background.image, background.rect)
    for bullet in bullets.sprites(): #returns list of sprites in the group
        bullet.draw_bullet() 
    for rocket in rockets.sprites():
        rocket.draw_rocket()
    stars.draw(screen)
    aliens.draw(screen)
    spaceship.blitme()
    if stats.game_active == False:
        play_button.draw_button()
    pygame.display.flip()

def __init__(self, custom_settings): #initialize the statistics
    self.custom_settings = custom_settings
    self.reset_stats()
    self.game_active = False

class Button():

def __init__(self, custom_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(None, 48) #type of font, the size of font

    self.rect = pygame.Rect(0,0, self.width, self.height)
    self.rect.center = self.screen_rect.center

    self.prep_msg(msg) #button's message creates just once

И это основной цикл:

while True:
    gf.check_events(custom_settings, screen, spaceship, bullets, 
        rockets, play_button, stats)
    if stats.game_active:
        spaceship.update()
        bullets.update()
        rockets.update()
        gf.update_ammunition(bullets, rockets, aliens, custom_settings, screen, spaceship)
        gf.update_aliens(custom_settings, aliens, screen, spaceship, stats, bullets)
        gf.create_fleet(custom_settings, screen, spaceship, aliens)
        gf.check_collisions(custom_settings, screen, spaceship, aliens, bullets, rockets)
        #gf.starsky(custom_settings, screen, spaceship, stars)
        gf.update_screen(custom_settings, screen, spaceship, aliens, bullets, rockets, 
            stars, background, play_button, stats)
        clock.tick(FPS)
        print(clock.get_fps())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...