Есть ли способ манипулирования глобальной переменной, которую вы используете в качестве аргумента для функции в lua? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь написать некоторый код в функцию, чтобы его можно было легко использовать повторно, увеличивая глобальное значение.

Проблема в том, что есть несколько различных глобальных переменных, которыми можно манипулировать, и мне нужна функция, чтобы иметь возможность обрабатывать каждый из них.

Я думал, что мог бы просто поместить глобальную переменную в аргумент функции, но она, похоже, не работает.Вероятно, потому что lua создает копию глобальной переменной, которую он принимает.

Есть ли способ убедиться, что глобальная переменная, которой она манипулирует, не просто копия?

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

Прямо сейчас я должен написать отдельную функцию для каждого случая приращения, что немного неудобно, если его можно раскрыть.

Прямо сейчас я должен сделать что-то подобное

foo_time_1 = 0 

foo_time_2 = 0 
function foo_time_1(var) 

foo_time_1 += 2
 if foo_time < 2 then 
   sfx(02)
 end 
end

function foo_time_2(var)
 if foo_time_2 < 2 then 
  sfx(02) 
 end
end

Это позволяет коду работать так, как задумано, но в идеале мне бы хотелось, чтобы код выглядел примерно так:

foo_time = 0
foo_time_2 = 0

function foo_time_manipulator(global_var, len, sfx)

global_var += 2 
 if global_var < len then 
  play(sfx)
 end
end 

//so I can write

foo_time_manipulator(foo_time, 2, 02)
foo_time_manupulator(foo_time_2, 3, 02)

Проблема в том, что глобальная переменная не меняется, и поэтомуЗвуковой эффект повторяется непрерывно, поскольку каждый кадр функции перечитывается, и он видит, что глобальное переменное сохраняется в значении, которое использовалось в качестве аргумента, а не в обновленной переменной.

Извините, если этот вопрос сформулирован плохо, его сложно сформулировать.

Есть ли способ в lua, чтобы иметь возможность манипулировать глобальной переменной, которая используется в качестве аргумента?

Хороший квалификатор может состоять в том, что этот код зацикливается, и поэтому требует внешнегопеременная в качестве счетчика.

1 Ответ

0 голосов
/ 19 мая 2019

Вы можете попробовать это:

function foo_time_manipulator(global_var_name, len, six)
 local global_var = _G[global_var_name]
 global_var = global_var + 2 
 if global_var < len then 
  play(sfx)
 end
end 

и использовать его вот так

foo_time_manipulator("foo_time", 2, 02)
foo_time_manupulator("foo_time_2", 3, 02)
...