我用pygame做了一段时间的游戏,终于决定我想为我的游戏制作可自定义的控件,以便玩家可以改变他们使用的按钮。
我之前(在Java中)使用配置文件完成了这项工作,但是将字符串转换为按键是一个缓慢而笨重的过程。我想知道是否有人有更好的想法?
感谢
丹尼尔
答案 0 :(得分:1)
您可以使用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()
将字符串的名称作为字符串返回,因此如果按下向上按钮,它将执行从字典中获取的代码
这是一种方法,不确定它是否最简单,告诉我你是否有任何问题
答案 1 :(得分:1)
我会用两个词。一个映射键到动作,如{"up": "move_up"}
,一个映射动作到{"move_up": player.move_up}
等函数(其中player.move_up是一个函数)。可以从配置文件加载操作dict的关键字,并且可以对要操作的操作进行硬编码。
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)]]()
...