Как исправить меню Pygame (космические захватчики)? - PullRequest
1 голос
/ 25 апреля 2020

Это моя первая игра, так что извините за грязный код. Я делаю игру космических захватчиков, и все, что я реализовал, работает нормально (спрайты, функция игры, musi c, экран паузы и т. Д. c). Я хотел реализовать действительно простой экран меню, где, если вы нажмете C, игра начнется. Однако проблема в том, что независимо от того, где я вызываю функцию меню, всегда есть проблема, вот код (я просто собираюсь опубликовать функцию меню и main l oop, так как все остальное, я считаю, не нужно ).

import pygame
import random
import math
from pygame import mixer

# Start pygame
pygame.init()

# Create Screen
screen = pygame.display.set_mode((1000, 710))

# Background Image
background = pygame.image.load('background.png').convert_alpha()

# Menu Variables
menu_font = pygame.font.Font('freesansbold.ttf', 65)
menuX = 380
menuY = 250

# Menu Function
def game_intro(x, y):
    menu = True
    while menu:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_c:
                    menu = False
                if event.key == pygame.K_q:
                    pygame.quit()
                quit()
    # Menu Text
        menu_text = menu_font.render("Space Invaders", True, (255, 255, 255))
        screen.blit(menu_text, (x, y))

        pygame.display.update()

# Game Loop
running = True
while running:

# RGB - Red, Green, Blue
    screen.fill((0, 0, 0))

# Background Image
    screen.blit(background, (0, 0))

----game_intro(menuX,menuY)---IF I PUT IT HERE, THE ACTUAL GAME APPEARS FOR ONE SECOND AND IT GOES BACK TO MAIN MENU-----------

# Making the screen stay still
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

--------game_intro(menuX,menuY)--- IF I PUT IT HERE, THE GAME APPEARS ONLY WHEN 'c' IS BEING HELD DOWN-----------------

*more code*

# Updating
    pygame.display.update()

Если я поставлю его выше pygame.display.update (), произойдет то же самое: игра появится на одну секунду, а затем вернется к экрану меню. Я пытался искать везде, но видео либо с 2014 года, и сайты с похожей проблемой не объясняют, как это исправить. Пожалуйста помоги.

1 Ответ

1 голос
/ 25 апреля 2020

Прежде всего вы должны выбросить l oop из вашей функции.

def game_intro(x, y):
    # Menu Text
        menu_text = menu_font.render("Space Invaders", True, (255, 255, 255))
        screen.blit(menu_text, (x, y))

отсутствующий код помещается в mainl oop следующим образом

...
# Making the screen stay still
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_c:
                menu = False
            if event.key == pygame.K_q:
                pygame.quit()
...

теперь в вашем основном oop вам нужно решить, рисовать ли меню или игру

if menu:
    game_intro(x, y)
else:
    #CODE THAT DRAWS THE GAME

все вместе:

import pygame
import random
import math
from pygame import mixer

# Start pygame
pygame.init()

# Create Screen
screen = pygame.display.set_mode((1000, 710))

# Background Image
background = pygame.image.load('background.png').convert_alpha()

# Menu Variables
menu_font = pygame.font.Font('freesansbold.ttf', 65)
menuX = 380
menuY = 250

# Menu Function
def game_intro(x, y):
    # Menu Text
        menu_text = menu_font.render("Space Invaders", True, (255, 255, 255))
        screen.blit(menu_text, (x, y))

# Game Loop
running = True
while running:

# RGB - Red, Green, Blue
    screen.fill((0, 0, 0))

# Background Image
    screen.blit(background, (0, 0))

# Making the screen stay still
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_c:
                menu = False
            if event.key == pygame.K_q:
                pygame.quit()

    if menu:
        game_intro(x, y)
    else:
        # CODE THAT DRAWS THE GAME

# Updating
    pygame.display.update()

это должно работать

обратите внимание, что вам нужно установить menu на True где-нибудь, чтобы попасть в меню

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