2017-03-12 14 views
1

私はpygameを使ってゲームを作成しています。 whileループを作成し、この機能が必要になるたびに条件が真になったら、これを簡単に行うことができますが、実際にこれを行うために使用できる関数があればはるかに良いでしょう。私はここで、この関数を書き、それが機能しなかったことが判明:ブール値がtrueになるまで待つ関数を作成する方法

def wait_until(condition): 
    while True: 
     Quit() #These three lines are required to allow for the program to continue running 
     pygame.display.update() 
     CLOCK.tick(FPS) 
     if condition(): break 

私は、この関数を呼び出すとき、その瞬間における条件の状態が変数「状態」に保存されての結果であると信じていますブール値として。それ以降は変更されても何もしません。例えば:

block = classes.sprite.Sprite(x = 50, y = 50) 
wait_until(block.distance_to(pygame.mouse.get_pos()) <= 100) 

だけマウスがさらにより100個のピクセル離れた場合関数にFalseを渡すのと同じであろう。

私はこの問題を解決するために何ができますか、本当に私を困らせてしまったし、私がしたいことをする機能を作るために何ができるか分からない。問題の

すべてのヘルプは、これはあなたの状態を評価するため、必要に応じて何度でも呼び出すことができる機能を、作成し

答えて

3
wait_until(lambda: block.distance_to(pygame.mouse.get_pos()) <= 100) 

にappriciatedされるだろう。

+0

ありがとう、これは問題を解決します。私はラムダを使ったことがありませんでしたので、私は知らなかったでしょう。 –

+1

@GeorgeWillcoxこの動作はラムダには結びつかないことに注意してください - あなたは、関数に条件を書いて、関数の名前を 'wait_until(。 ..) '。あなたが効果的にやっていることは、条件を一度評価して結果を渡すのではなく、後であなたの関数によって評価される条件を囲むことなのでどちらのアプローチも効果的です。 –

関連する問題