Game Maker не распознает переменную

Пытаясь настроить массив таргетинга для игры в стиле ММО в GameMaker8 Pro, у меня есть этот код в событии создания для персонажа игрока, который работает и работает отлично:

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 не распознает переменную?


person Saethlin    schedule 09.04.2011    source источник
comment
Задайте вопрос на gamedev.stackexchange.com.   -  person Dour High Arch    schedule 09.04.2011


Ответы (4)


Я предполагаю, что один или несколько экземпляров противника были уничтожены между событием создания игрока и событием шага, в котором произошла ошибка. Возможно, лучшим решением было бы перебрать всех врагов с помощью конструкции with(), это быстрее, и вы можете быть уверены, что все экземпляры, с которыми вы работаете, действительно существуют.

person Medo42    schedule 28.05.2011

попробуйте поставить скобки вокруг объектной переменной. Раньше у меня были проблемы со ссылками из ссылочного расширения.

(global.ttarget[g]).range

или даже сохранить его в новую переменную

for (g = 0; g<global.rmtargets; g+=1)
{
    curr_target = global.ttarget[g]
    curr_target.range
}
person Brennan Hatton    schedule 15.10.2012

Вместо использования глобального. перед каждым экземпляром переменной в коде вы также можете инициализировать его командой:

globalvar (переменная), (переменная2);

Тогда вы сможете использовать переменную без global. перед ним :)

Если объект rk не является врагом, то объект rk не может обнаружить глобальную переменную диапазона. Переменные, инициализированные без var или globalvar, применяются только к объекту, в котором они были определены.

person Timtech    schedule 25.07.2013

Прежде всего, поставьте круглые скобки в условиях if.

Во-вторых, вы должны предоставить больше информации о вашей среде и логике программирования, и IMO перестаньте использовать все эти глобальные переменные.

В любом случае, насколько я понял, что вы делаете, попробуйте использовать ключевое слово with:

with(global.ttarget[g]) {

other.hv = range;

}
person Edoardo Rosso    schedule 09.09.2020