2

我想在 GDSCript 中的几个变量名的末尾附加一个整数。

我正在做一个 roguelike,我决定组织主题图块和 NPC,并按编号将它们分组到文件夹中(即,主题 1 可能是一个充满不死生物的地下室,主题 2 可能是一个充满动物的森林)。这个想法是,在关卡生成开始时,我可以随机选择一个数字,生成一个关卡并用相应的敌人填充它。

例如(假设随机数为1)

tileset_to_use = tileset_1
NPC_mid_boss = folder_1/mid_boss
NPC_end_boss = folder_1/end_boss

除了一系列嵌套的 IF 语句之外:

if RNG = 1:
    tileset_to_use = tileset_1
    NPC_mid_boss = folder_1/mid_boss
    NPC_end_boss = folder_1/end_boss
elif RNG = 2:   
    tileset_to_use = tileset_2
    etc...

......这样做更有效的方法是什么?像tileset+RNG这样的东西我已经研究过使用字典,但是除非我误解了它们,否则它们似乎用于访问值而不是生成变量名。

4

2 回答 2

3

如果您的所有主题都具有相同的确切结构,您可以执行类似于Christopher Bennett 建议的操作。另一个可能为您提供更多灵活性的选项,但可能会增加重复次数,如下所示:

# Defined at class level
const THEMES = [
    # Theme 1
    {
        tileset = 'tileset_1',
        NPC_mid_boss = 'folder_1/mid_boss',
        NPC_end_boss = 'folder_1/end_boss',
        # ...
    },
    # Theme 2
    {
        tileset = 'tileset_2',
        NPC_mid_boss = 'folder_2/mid_boss',
        NPC_end_boss = 'folder_2/end_boss',
        # ...
    },
    # ...
]


func my_func():
    # Pick a random theme
    var theme = THEMES[randi() % THEMES.size()]
    tileset_to_use = theme.tileset
    # ...

这还允许您添加更多属性,例如任意字符串(例如主题名称)或其他内容,并且可以根据需要外部化为 JSON 文档之类的内容。但同样,它需要更多的手动设置。

于 2019-05-01T15:30:55.293 回答
2

对不起,我想我在发表第一条评论时误解了你的问题。像这样的东西会起作用吗?

var RNG = randi()%1-(total number of tilesets); 
var tileset_to_use = (str("tileset_",RNG));  
    NPC_mid_boss = (str("folder_",RNG,"/mid_boss"));
于 2019-05-01T15:15:54.680 回答