Нажатие кнопок Pygame и Livewires не работает?

поэтому в моем меню в игре, которую я создаю, отображается изображение, которое показывает, как играть в игру, и у меня есть некоторый код, чтобы, когда игрок нажимает кнопку b, он возвращается в главное меню, но это не работает , Может кто-то помочь мне, пожалуйста?

def manual():

    image = games.load_image("options.jpg")
    games.screen.background = image
    if games.keyboard.is_pressed(games.K_b):
        menu()
    games.screen.mainloop()

'menu ()' - это еще одна функция, в которой есть весь код главного меню

Вот функция меню

def menu():
    pygame.init()
    menubg = games.load_image("menubg.jpg", transparent = False)
    games.screen.background = menubg

    # Just a few static variables
    red   = 255,  0,  0
    green =   0,255,  0
    blue  =   0,  0,255

    size = width, height = 640,480
    screen = pygame.display.set_mode(size)
    games.screen.background = menubg
    pygame.display.update()
    pygame.key.set_repeat(500,30)

    choose = dm.dumbmenu(screen, [
                            'Start Game',
                            'Manual',
                            'Show Highscore',
                            'Quit Game'], 220,150,None,32,1.4,green,red)
    if choose == 0:
        main()
    elif choose == 1:
        manual()
    elif choose == 2:
        print("yay")
    elif choose == 3:
        print ("You choose Quit Game.")

person Callum Houghton    schedule 13.11.2013    source источник
comment
что делает функция меню? вы пробовали отлаживать свой код? Вы также писали - вернуться в главное меню, значит ли это, что ручная функция вызывается из главного меню?   -  person Bartlomiej Lewandowski    schedule 13.11.2013
comment
ручная функция вызывается из функции меню в одном месте да   -  person Callum Houghton    schedule 13.11.2013
comment
в меню () вы вызываете manual (), который вызывает меню () с вызовом manual () и т. д. - это плохая идея.   -  person furas    schedule 13.11.2013


Ответы (1)


Я думаю, что is_pressed() в manual() не ждет вашей печати, поэтому вы звоните mainloop(), поэтому я думаю, вы никогда не покинете этот цикл.

Я вижу в вашем коде и другие плохие идеи, например:

  • menu() вызов manual(), который вызывает menu(), который вызывает manual() и т. Д. - используйте return и используйте цикл в menu()
  • каждый раз, когда вы звоните menu(), вы вызываете pygame.init() и pygame.display.set_mode() - вы должны использовать его только один раз.

РЕДАКТИРОВАТЬ:

Я не знаю, как games.keyboard.is_pressed() работает (потому что в PyGame этой функции нет), но думаю, manual() может быть:

def manual():

    image = games.load_image("options.jpg")
    games.screen.background = image

    while not games.keyboard.is_pressed(games.K_b):
        pass # do nothing

    # if `B` was pressed so now function will return to menu()

и вам нужно создать цикл в меню:

running = True

while running:
    choose = dm.dumbmenu(screen, [
                        'Start Game',
                        'Manual',
                        'Show Highscore',
                        'Quit Game'], 220,150,None,32,1.4,green,red)
    if choose == 0:
        main()
    elif choose == 1:
        manual()
        # if 'B' was press manual() will return to this place
    elif choose == 2:
        print("yay")
    elif choose == 3:
        running = False
        print ("You choose Quit Game.")
person furas    schedule 13.11.2013
comment
Итак, как мне сохранить ручную функцию на экране? Спасибо, что помог мне очистить код :) - person Callum Houghton; 14.11.2013
comment
В ответ добавлю несколько предложений. - person furas; 14.11.2013