实现键盘处理的好方法是什么?在我编写键盘交互式程序(如俄罗斯方块游戏)的任何语言中,我最终得到的代码如下所示:
for event in pygame.event.get(): if event.type == KEYDOWN: if False: pass #make everything an elif elif rotating: pass elif event.key == K_q: elif event.key == K_e: elif event.key == K_LEFT: curpiece.shift(-1, 0) shadowpiece = curpiece.clone(); setupshadow(shadowpiece) elif event.key == K_RIGHT: curpiece.shift(1, 0) shadowpiece = curpiece.clone(); setupshadow(shadowpiece)
(缩短).我不喜欢这个,因为这必须在我的主循环中,并且它与程序的所有部分混淆.这也使得用户配置屏幕不可能改变哪个键映射到哪个动作.使用某种形式的函数回调是否有良好的模式?
你可以创建一个字典,其中键是输入,值是一个处理按键的函数:
def handle_quit(): quit() def handle_left(): curpiece.shift(-1, 0) shadowpiece = curpiece.clone(); setupshadow(shadowpiece) def handle_right(): curpiece.shift(1, 0) shadowpiece = curpiece.clone(); setupshadow(shadowpiece) def handle_pause(): if not paused: paused = True branch = { K_q: handle_quit K_e: handle_pause K_LEFT: handle_left K_RIGHT: handle_right } for event in pygame.event.get(): if event.type == KEYDOWN: branch[event.key]()
然后更改密钥是修改字典的键的问题.