pygame でグラフィカル インターフェイスを作成しています。プログラムは通常高速で実行されますが、キーを押すたびに、マウスが 0.5 秒間動かなくなります。誰かが私に方向性を教えてくれるかどうか疑問に思っています。
これが私のコードがどのように機能するかの一般的な感覚です。問題はすべてのキーバインド関数で一貫して発生するため、トップレベルのメインループ、バインディング、またはインフラストラクチャに問題があると思います。
#######PERPETUAL ACTIONS#
_perpetual_actions = []
def start_doing(function,insertAt=None):
global _perpetual_actions
if insertAt==None:
insertAt=len(_perpetual_actions)
_perpetual_actions.insert(insertAt,function)
def stop_doing(function):
global _perpetual_actions
if _perpetual_actions.count(function):
_perpetual_actions.remove(function)
def do_perpetual_actions():
global _perpetual_actions
for action in _perpetual_actions:
action()
def print_perpetual_actions():
global _perpetual_actions
for action in _perpetual_actions:
print action.__name__
######BINDING INFRASTRUCTURE########
_bindings_dict = { }
def get_action(key, mod):
try:
action = _bindings_dict[(key,mod)]
except KeyError:
action = None
return action
def get_binding(action_to_find):
for event, action in _bindings_dict.iteritems():
if action == action_to_find:
return event
return None
def bind(event, action):
_bindings_dict[event] = action
def unbind(event):
_bindings_dict.pop(event)
def swap_bindings(newBindings):
_bindings_dict = newBindings
####MAIN LOOP####
if '-t' in sys.argv:
test()
while True:
for event in pygame.event.get():
if event.type == MOUSEMOTION:
mousex, mousey = event.pos
mouse.x = mousex
mouse.y = mousey
elif event.type == KEYDOWN:
action = get_action(event.key,event.mod)
if not action == None:
action()
elif event.type == KEYUP:
action = get_action(-event.key,event.mod)
if not action == None:
action()
elif event.type == QUIT:
quit()
do_perpetual_actions()
clock.tick(40)
バインディング ディクショナリは後で定義され、将来のある時点で、プログラムの実行中にユーザーが変更できるようになります。関係のない推奨事項がある場合はお知らせください。私は始めたばかりで、パイゲームのアドバイスをいただければ幸いです:)