【发布时间】:2014-03-08 21:14:38
【问题描述】:
我用 pygame 制作游戏已经有一段时间了,最后决定要为我的游戏制作可自定义的控件,以便玩家可以更改他们使用的按钮。
我之前(在 Java 中)使用配置文件完成了此操作,但是将字符串转换为按键是一个缓慢而笨重的过程。我想知道是否有人有更好的想法?
谢谢
丹尼尔
【问题讨论】:
标签: python pygame game-development
我用 pygame 制作游戏已经有一段时间了,最后决定要为我的游戏制作可自定义的控件,以便玩家可以更改他们使用的按钮。
我之前(在 Java 中)使用配置文件完成了此操作,但是将字符串转换为按键是一个缓慢而笨重的过程。我想知道是否有人有更好的想法?
谢谢
丹尼尔
【问题讨论】:
标签: python pygame game-development
我会使用两个字典。一个将键映射到动作,例如{"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() 将键的名称作为字符串返回,因此如果您按下向上按钮,它会执行从字典中获取的向上代码
这是一种方法,不确定是否最简单,如果您有任何问题,请告诉我
【讨论】: