Ошибка кнопки Pygame с выбором уровня - PullRequest
0 голосов
/ 04 августа 2020
• 1000 который инициирует уровень 1 после его импорта. Код находится под соответствующими частями. Я бы хотел go из главного меню для выбора уровня, а затем до уровня 1 после выбора кнопки после импорта.
def main_menu():
global click
while True:
    screen.fill((0, 0, 0))
    screen.blit(background_image, [0, 0])



    mx, my = pygame.mouse.get_pos()

    button_1 = pygame.Rect(399, 250, 200, 40)
    button_2 = pygame.Rect(399, 400, 200, 40)
    button_3 = pygame.Rect(399, 550, 200, 40)
    if button_1.collidepoint((mx, my)):
        if click :
            levelselect()
    if button_2.collidepoint((mx, my)):
        if click:
            user_guide()
    if button_3.collidepoint((mx, my)):
        if click:
            credits()


    pygame.draw.rect(screen, (0,0,0), button_1)
    pygame.draw.rect(screen, (0,0,0), button_2)
    pygame.draw.rect(screen, (0,0,0), button_3)


    buttonImage = pygame.image.load("button1.png")
    buttonImage = pygame.transform.scale(buttonImage, (600, 80))
    pygame.draw.rect(screen, (0, 0, 0), button_1)
    screen.blit(buttonImage, (200, 60))

    buttonImage = pygame.image.load("play.png")
    buttonImage = pygame.transform.scale(buttonImage, (150, 30))
    pygame.draw.rect(screen, (0, 0, 0), button_1)
    screen.blit(buttonImage, (425, 255))

    buttonImage = pygame.image.load("User Guide.png")
    buttonImage = pygame.transform.scale(buttonImage, (180, 30))
    pygame.draw.rect(screen, (0, 0, 0), button_2)
    screen.blit(buttonImage, (410, 405))

    buttonImage = pygame.image.load("credits.png")
    buttonImage = pygame.transform.scale(buttonImage, (150, 30))
    pygame.draw.rect(screen, (0, 0, 0), button_3)
    screen.blit(buttonImage, (425, 555))

    click = False
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            if event.button == 1:
                click = True

    button_4 = pygame.Rect(40, 700, 80, 20)
    if button_4.collidepoint((mx, my)):
        if click:
            pygame.quit()
            sys.exit()

    pygame.display.update()
    mainClock.tick(60)






def levelselect():
running = True
while running:
    screen.fill((0, 0, 0))
    screen.blit(background_image, [0, 0])
    mx, my = pygame.mouse.get_pos()
    global click

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False

    button_4 = pygame.Rect(399, 250, 200, 40)
    button_5 = pygame.Rect(399, 400, 200, 40)
    button_6 = pygame.Rect(399, 550, 200, 40)
    if button_4.collidepoint((mx, my)):
        if click:
            import level1

    if button_5.collidepoint((mx, my)):
        if click:
            user_guide()
    if button_6.collidepoint((mx, my)):
        if click:
            credits()

    pygame.draw.rect(screen, (0, 0, 0), button_4)
    pygame.draw.rect(screen, (0, 0, 0), button_5)
    pygame.draw.rect(screen, (0, 0, 0), button_6)

    buttonImage = pygame.image.load("levelselectimg.png")
    buttonImage = pygame.transform.scale(buttonImage, (600, 80))
    pygame.draw.rect(screen, (0, 0, 0), button_4)
    screen.blit(buttonImage, (200, 60))

    buttonImage = pygame.image.load("level1.png")
    buttonImage = pygame.transform.scale(buttonImage, (150, 30))
    pygame.draw.rect(screen, (0, 0, 0), button_4)
    screen.blit(buttonImage, (425, 255))

    buttonImage = pygame.image.load("level2.png")
    buttonImage = pygame.transform.scale(buttonImage, (180, 30))
    pygame.draw.rect(screen, (0, 0, 0), button_5)
    screen.blit(buttonImage, (410, 405))

    buttonImage = pygame.image.load("level3.png")
    buttonImage = pygame.transform.scale(buttonImage, (150, 30))
    pygame.draw.rect(screen, (0, 0, 0), button_6)
    screen.blit(buttonImage, (425, 555))

    click = False
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            if event.button == 1:
                click = True

    pygame.display.update()
    mainClock.tick(60)

main_menu()

1 Ответ

0 голосов
/ 05 августа 2020

Исходя из кода, вы собираетесь выполнить levelselect (), а затем сразу перейти на уровень 1.

Это потому, что обе кнопки находятся в одном положении, и вы не сбрасываете флаг щелчка перед новым отображается экран. Кнопка на втором экране сразу срабатывает.

Измените этот код:

if button_1.collidepoint((mx, my)):
    if click :
        levelselect()

На этот:

if button_1.collidepoint((mx, my)):
    if click :
        click = False
        levelselect()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...