我已经使用Pygame制作游戏了一段时间,并最终决定我要为游戏进行可自定义的控件,以便玩家可以更改他们使用的按钮。<<<<<<<<<<<<<</p>
我之前(在Java中)使用配置文件进行了此操作,但是将字符串转换为按键是一个缓慢而笨拙的Proccess。我想知道是否有人有更好的想法?
谢谢
丹尼尔
我将使用两个dict。一个将键映射到诸如{"up": "move_up"}
之类的操作,一个将操作映射到诸如{"move_up": player.move_up}
之类的函数(player.move_up是函数)。可以从配置文件加载操作的关键,并且可以将功能的操作进行硬编码。
import pygame
from ConfigParser import SafeConfigParser
action2function = {
"up": player.move_up,
"down": player.move_down,
"left": player.move_left,
"right": player.move_right
}
config = SafeConfigParser()
config.read(CONFIG_DIRS)
key2action = config.items()
...
for event in pygame.event.get():
if event.type == KEYDOWN:
action2function[key2action[pygame.key.name(event.key)]]()
...
您可以使用dict并将每个键分配给操作,当用户更改控件时,只需重新分配操作
示例:
key_presses = {'a' : 'example()',
'up' : 'rect.x +=1',
'down' : 'rect.y -= 1'
#etc
然后,您只需获取每个按钮按事件的event.key
,例如:
#in your mainloop
if event.type == KEYDOWN:
key = pygame.key.name(event.key) #returns name of key in string
exec(keypresses[event.key])
event.key
返回int,然后 pygame.key.name()
返回键的名称为字符串,因此,如果按下up按钮,它将执行从字典中获得的代码
这是一种方法,不确定它是否最简单,告诉我您是否有任何问题