Pygame с функциями / создание новой страницы

Ниже приведен код к игре, которую я пытаюсь сделать в моем классе для начинающих python для средней школы. Проблема, с которой я постоянно сталкиваюсь, заключается в том, что я сделал функцию кнопки, но каждый раз, когда я нажимаю кнопку, она будет показывать функцию выбора уровня(ту, которую я хочу), но только тогда, когда я щелкнул мышью, но как только я отпущу ее, она вернется в Главное меню. Если кто-то может помочь мне, я был бы очень признателен 🙂

Imports
import pygame
import time
import random

# Define some colors
BLACK    = (   0,   0,   0)
WHITE    = ( 255, 255, 255)
GREEN    = (   0, 255,   0)
RED      = ( 255,   0,   0)

pygame.init()

#Music and Sound Imports
pygame.mixer.music.load("MenuMusic.wav")

# Set the width and height of the screen [width, height]
size = (1920, 980)
screen = pygame.display.set_mode(size)

pygame.display.set_caption("Panda On The Run v1")

# Loop until the user clicks the close button.
done = False

# Used to manage how fast the screen updates
clock = pygame.time.Clock()

#Main Menu
Main_menu = pygame.image.load("Main Menu Backgroundv3.png")


    # -------- Main Program Loop -----------
def level_select():
    screen.fill(WHITE)

def button(msg, x,y,ic,ac,action = None):
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    #Level Select Colour Change
    if x + 625 > mouse[0] > x and y + 225 > mouse[1] > y:
        font = pygame.font.SysFont('Calibri', 100, True, False)
        text = font.render(msg,True,ac)
        screen.blit(text, [90, 420])
        if click[0] == 1 and action != None:
            if action == "level":
                level_select()

    else:
        font = pygame.font.SysFont('Calibri', 100, True, False)
        text = font.render(msg,True,ic)
        screen.blit(text, [90, 420])

    #Settings Colour Change
    if 1300 + 1900 > mouse[0] > 1300 and 350 + 250 > mouse[1] > 350:
        font = pygame.font.SysFont('Calibri', 100, True, False)
        text = font.render("Settings",True,RED)
        screen.blit(text, [1450, 420])
    #Controls Colour Change
    if 35 + 800 > mouse[0] > 35 and 600 + 500 > mouse[1] > 600:
        font = pygame.font.SysFont('Calibri', 100, True, False)
        text = font.render("Controls",True,RED)
        screen.blit(text, [150, 770])
    #About Panda Run
    if 1285 + 625 > mouse[0] > 1285 and 677 + 250 > mouse[1] > 677:
        font = pygame.font.SysFont('Calibri', 80, True, False)
        text = font.render("About Panda Run",True,RED)
        screen.blit(text, [1325, 775])




#Main Intro
def game_intro():
    #pygame.mixer.music.play(5)
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    intro = True
    while intro:
        for event in pygame.event.get():
            print(event)
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        screen.blit(Main_menu, [0,-100])

        #Level Select 
        font = pygame.font.SysFont('Calibri', 100, True, False)
        text = font.render("Level Select",True,BLACK)
        screen.blit(text, [90, 420])

        #Settings
        font = pygame.font.SysFont('Calibri', 100, True, False)
        text = font.render("Settings",True,BLACK)
        screen.blit(text, [1450, 420])

        #Controls
        font = pygame.font.SysFont('Calibri', 100, True, False)
        text = font.render("Controls",True,BLACK)
        screen.blit(text, [150, 770])

        #About Panda Run
        font = pygame.font.SysFont('Calibri', 80, True, False)
        text = font.render("About Panda Run",True,BLACK)
        screen.blit(text, [1325, 775])

        button("Level Select", 35,335,BLACK,RED,"level")

        pygame.display.update()
        clock.tick(15)




    # First, clear the screen to white. Don't put other drawing
    # above this, or they will be erased with this command.

    # --- Go ahead and update the screen with what we've drawn.
    pygame.display.flip()

    # --- Limit to 60 frames per second
    clock.tick(60)

# Close the window and quit.
# If you forget this line, the program will 'hang'
# on exit if running from IDLE.
game_intro()
pygame.quit()

1 ответ

  1. Он возвращается в Главное меню, потому level_select()что ничего не делает. Он заполняет экран белым цветом, а затем возвращаетсяbottom(), и вы снова в главном меню. Не ожидайте, что (почти) пустая функция будет делать какую-то магию.

    Если вы, что остаться в level_selectто вы должны что-то сделать.

    Если level_selectдолжен отображать новое меню или что-то , то создайте в этой функции новый «mainloop», который будет отображать элементыlevel_select, проверять события и т.д.

    Каждый "stage"нуждается в собственном "mainloop"("while running"по образу) подобии этого:

    Введите описание изображения здесь

    Но это может быть проще, если вы работаете с классами.

    «Stage example» на GitHub: furas / python-примеры / pygame / stage-пример