我知道如何加载Sprite工作表,裁剪图像并返回这些图像的列表,但是我希望通过名称而不是索引来引用我的Sprite,以保持代码的可读性和可管理性,但是有时它很长而且写出精灵名称列表很乏味。
我通常创建一个字典,并按名称引用我需要的精灵,但是我想知道是否应该对名称进行硬编码?
这是我通常要做的:
sprites = load_spritesheet('spr_buttons.png', (64, 64))
BUTTON_NAMES = ['start', 'start_hover', 'start_click', 'back', 'back_hover',
'back_click', 'skip', 'skip_hover', 'skip_click', 'exit',
'exit_hover', 'exit_click', 'check', 'check_hover',
'check_click', 'blank']
spr_buttons = {}
for index, sprite in enumerate(sprites):
spr_buttons[BUTTON_NAMES[index]] = sprite
以这些按钮精灵为例,我还有一个按钮类,并为每个按钮创建了一个新实例,并传入了精灵的名称。
这很好,但是我想找到一种更好的方法。我是否要创建一个.txt文件来陪伴我的Sprite工作表并从中获取名称?还是我使用分配给每个子画面的关键字+索引号(例如button_1
,button_2
等)?
答案 0 :(得分:2)
您可以使用zip()
函数以简单的方式创建字典:
sprites = load_spritesheet('spr_buttons.png', (64, 64))
BUTTON_NAMES = ['start', 'start_hover', 'start_click', 'back', 'back_hover',
'back_click', 'skip', 'skip_hover', 'skip_click', 'exit',
'exit_hover', 'exit_click', 'check', 'check_hover',
'check_click', 'blank']
spr_buttons = dict(zip(BUTTON_NAMES, sprites))
答案 1 :(得分:1)
我建议定义enum
来命名按钮:
from enum import Enum
class Button(Enum):
start = 0
start_hover = 1
# [...]
创建一个字典,其中每个按钮都与枚举器相关联:
spr_buttons = dict(zip(Button, sprites))
因此可以通过以下方式访问按钮:
sprite = spr_buttons[Button.start]
,甚至使用getattr
和名称:
sprite = spr_buttons[getattr(Button, "start")]
或者,您可以创建按钮列表并通过枚举器的.value
属性进行访问,该属性是列表的索引:
spr_buttons = list(sprites)
sprite = spr_buttons[Button.start_hover.value]
答案 2 :(得分:0)
您可以使用子画面的序列解压缩将它们分配给您要使用的名称:
sprites = load_spritesheet('spr_buttons.png', (64, 64))
start, start_hover, start_click, back, back_hover, back_click, \
skip, skip_hover, skip_click, exit, exit_hover, exit_click, \
check, check_hover, check_click, blank = sprites