Добавить число к имени переменной в GDScript - PullRequest
2 голосов
/ 01 мая 2019

Я бы хотел добавить целое число в конец нескольких имен переменных в GDSCript. GDScript разделяет некоторый синтаксис с Python, поэтому я отметил оба в своем вопросе.

Я работаю над похожим на рогалика и решил организовать тематические наборы плиток и 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 Я изучал использование словарей, но, если я их неправильно понял, они, похоже, используются для доступа к значениям, а не для генерации имен переменных.

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Если все ваши темы имеют одинаковую точную структуру, вы можете сделать что-то похожее на , что предлагает Кристофер Беннетт .Еще один вариант, который может дать вам больше гибкости за счет, возможно, большего количества повторений, выглядит примерно так:

# 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-документа , если хотите.Но опять же, требуется больше ручной настройки.

2 голосов
/ 01 мая 2019

Извините, мне кажется, я неправильно понял ваш вопрос, когда опубликовал свой первый комментарий. Будет ли что-то вроде этой работы?

var RNG = randi()%1-(total number of tilesets); 
var tileset_to_use = (str("tileset_",RNG));  
    NPC_mid_boss = (str("folder_",RNG,"/mid_boss"));
...