Game Maker не распознает переменную
Пытаясь настроить массив таргетинга для игры в стиле MMO в GameMaker8 Pro, у меня есть этот код в событии create для персонажа игрока, который прекрасно работает и работает:
j = 0
i = 0
g = 0
for (i=100000; i<1000000; i+=1) if instance_exists(i) {if i.object_index = enemy {global.ttarget[j] = i j+=1} if i.object_index = rk or i.object_index = sage {global.etarget[g] = i g += 1}}
global.rmtargets = j
global.etargets = g
Затем запустите этот код в событии шага для персонажа игрока:
h = 0
g = 0
i = 0
for (i=0; i<global.rmtargets; i+=1) global.target[i] = 0
global.target[0]=101139
for (h = 0; h<global.rmtargets; h+=1){hv = -1
for (g = 0; g<global.rmtargets; g+=1){if global.ttarget[g].range > hv {hv = global.ttarget[g].range}}
global.target[h] = hv
global.ttarget[h] = -1}
Возвращает это сообщение об ошибке:
ERROR in
action number 1
of Step Event
for object rk:
Error in code at line 8: for (g = 0; g<global.rmtargets; g+=1){if global.ttarget[g].range > hv {hv = global.ttarget[g].range}}
at position 61: Unknown variable range
Хотя у меня есть это в событии создания для врага:
range = 0
range = distance_to_object(rk)
И я использовал такой синтаксис во всем:
global.target[target].threat[s] += damage
Помогите? Есть идеи, почему Game Maker не распознает переменную?
3 ответа
Попробуйте поставить скобки вокруг переменной объекта. У меня были проблемы с ссылками из ссылочного расширения раньше.
(global.ttarget[g]).range
или даже сохранить его в новой переменной
for (g = 0; g<global.rmtargets; g+=1)
{
curr_target = global.ttarget[g]
curr_target.range
}
Мое лучшее предположение состоит в том, что один или несколько вражеских экземпляров были уничтожены между событием создания игрока и событием шага, где происходит ошибка. Возможно, лучшим решением было бы перебрать всех врагов, используя конструкцию with(), это быстрее, и вы можете быть уверены, что все экземпляры, с которыми вы работаете, действительно существуют.
Вместо использования глобальных. перед каждым экземпляром переменной в коде вы также можете инициализировать его командой:
globalvar (переменная), (переменная2);
Тогда вы сможете использовать переменную без глобальных. перед ней:)
Если объект rk не является врагом, то нет никакой глобальной переменной диапазона, обнаруживаемой объектом rk. Переменные, инициализированные без var или globalvar, применяются только для объекта, в котором они были определены.
Прежде всего, поставьте круглые скобки в условия if.
Во-вторых, вы должны предоставить больше информации о вашей среде и логике программирования, и IMO прекратит использовать все эти глобальные переменные.
В любом случае, насколько я понял из того, что вы делаете, попробуйте использовать ключевое слово with:
with(global.ttarget[g]) {
other.hv = range;
}