проблема с использованием списка в студии производителя игр

Я новичок в гейммейкере. Я создал список и хочу сравнить все данные в списке с определенным значением. Я использовал следующий код:

for(var i=0;i<ds_list_size(lst);i++;)
{
    if ds_list_find_value(lst,i)>tmp
       ds_list_replace(lst,i,ds_list_find_value(lst,i)-1);
}

и я сталкиваюсь со следующей ошибкой:

Push :: Execution Error - Variable Get -1.lst(100001, -1)
at gml_Object_object0_RightButtonPressed_1 (line 21) - for(var i=0;i

where is my problem?

Спасибо всем.


person Mansoor    schedule 26.03.2020    source источник
comment
Как указывает ошибка, переменная lst вообще не задана для вызывающего объекта. Вы хотели бы исправить это в первую очередь.   -  person YellowAfterlife    schedule 30.03.2020


Ответы (2)


если ваш первый цикл for i = 0; и когда первая запись в списке меньше, чем tmp, она пытается заменить первое место в списке несуществующим. поэтому вы можете либо проверить, является ли это первой записью в списке с помощью

if ( i == 0 ) { }

или вы можете запустить цикл for со второй записи с помощью

for(var i=1;i<ds_list_size(lst);i++;)
person EmGi    schedule 29.03.2020

Я думаю, что ; в конце i++; не нужен, вам нужно только использовать ; в цикле for в качестве разделителя.

Однако GML дает больше свободы для общих правил C# (например, отсутствие скобок вокруг условия if), так что, возможно, это разрешено.

Другая возможность может заключаться в том, что индекс находится за пределами допустимого диапазона ds_list_replace().

person Steven    schedule 27.03.2020
comment
Спасибо Стивен за ваш ответ. как вы сказали, для точки с запятой нет проблем, и я думаю, что это невозможно, поскольку ds_list_replace выходит за пределы диапазона, потому что диапазон for находится в диапазоне от 0 до (ds_lis_size (lst) -1) - person Mansoor; 27.03.2020