Pygame - 可自定义的控件

时间:2014-03-08 21:14:38

标签: python pygame game-development

我用pygame做了一段时间的游戏,终于决定我想为我的游戏制作可自定义的控件,以便玩家可以改变他们使用的按钮。

我之前(在Java中)使用配置文件完成了这项工作,但是将字符串转换为按键是一个缓慢而笨重的过程。我想知道是否有人有更好的想法?

感谢

丹尼尔

2 个答案:

答案 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)]]()
...