2017-03-15 14 views
0

pythonでpygameで問題が発生しました。ユーザーが特定の入力を行った後(上矢印キーが押された場合)に関数にジャンプし、その関数(start1)中にmain()に再度コールし、プレイヤー入力時のPython関数呼び出し

RecursionError::私はこれを取得するプログラムを実行すると、「矢印キーアップ」私はスタートに取得したいもう一度押す()

は最大再帰の深さは

何かアドバイスを超えましたか?ここで

はコードです:

def main(text, func): 

    exit = False 
    while not exit: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_UP: 
       func 

      if event.key == pygame.K_DOWN: 
       pygame.quit() 
       quit() 

    screen.fill(black) 

    text = str(text) 
    font = pygame.font.SysFont('georgia', 16) 
    message = font.render(text, True, white) 
    screen.blit(message, (screen_width/2, screen_height/2)) 

    pygame.display.flip() 
    clock.tick(30) 



def start(): 
    main("Hello, press key-up to get to start 1!", start1()) 


def start1(): 
    os.system('cls') 
    main("Good, Back to start on Key-up", start()) 



start() 

答えて

0

あなたはmainstart1start機能を渡していないが、あなたはコール彼らは代わりに前にメインであっても呼ばれています。

def start(): 
    main("Hello, press key-up to get to start 1!", start1()) 

def start1(): 
    os.system('cls') 
    main("Good, Back to start on Key-up", start()) 

startは、各ルーチンでmainのパラメータを評価する際startを呼び出す、start1を呼び出します。 mainは呼び出す機会がありません。無限のピンポン再帰が最初に発生します。

への変更:

def start(): 
    main("Hello, press key-up to get to start 1!", start1) 

def start1(): 
    os.system('cls') 
    main("Good, Back to start on Key-up", start) 

mainでここコールあなたの関数には、このようなコードでfunc()funcを置き換える:代わりにジャンプの観点で考えるの

if event.key == pygame.K_UP: 
    func() 
+0

ああ、少し助けてくれました! –

0

、してみてください状態の観点から考えること。ステートマシンはゲーム開発の非常に典型的なツールです。

「少なくとも押した」、「一度押した」、「上に2回押した」という3つの状態があります。

この状態を変数に格納し、キーを押して更新します。次にを押すと、start()を呼び出すかどうかをすぐに知ることができます。

関連する問題