Переменные
Переменная - это именованная область памяти со значением, которое может быть многократно прочитано и/или изменено. Существует два вида переменных - глобальные и локальные.
Глобальные переменные
Глобальная переменная начинается со знака $, после которого следует комбинация латинских букв, цифр и _:
$variable1
$100
$____
Значения глобальных переменных доступны из любого места в коде.
Сохраняемые переменные
Сохраняемые переменные - это особый вид глобальных переменных, добавленный в LCS и VCS режимах. Перед их именем стоит $_, например $_var. Значение такой переменной восстанавливается при загрузке сохраненной игры. Глобальные переменные, которые начинаются только с $ (например, $var), не сохраняют свое значение и обнуляются при загрузке сохранения в LCS или VCS.
DMA переменные
Во время компиляции имена переменных заменяются на числа. Эти числа являются индексами в специальном массиве, который используется игрой для хранения значений глобальных переменных. Индекс является уникальным числом, присваиваемым конкретной переменной.
Глобальная переменная, чье имя состоит из цифр, называетсяDMA-переменная (Direct Memory Address - прямой доступ к памяти). Это имя и будет индексом, который использует игра.
См. Alloc.
Локальные переменные
Именем локальной переменной служит число, после которого стоит знак @.
0@
999@
56@Значения локальных переменных доступны только в пределах текущего скрипта или миссии.
Количество локальных переменных в одном скрипте/миссии строго ограничено.
Переменные-таймеры
Каждый скрипт или миссия также имеют две особые локальные переменные, которые называются TIMERA и TIMERB. Значение переменной-таймера постоянно увеличивается с ходом игры, поэтому они обычно используются, чтобы измерять время, пройденное с определенного момента (сброса таймера).
0006: TIMERA = 0 // сброс таймера
:WAIT_2S
0001: wait 0 ms
00D6: if
0019: TIMERA > 2000 // если таймер увеличился до 2000, т.е. прошло 2 секунды
004D: jump_if_false @WAIT_2S
0662: printstring "2 seconds has passed" // показать текстОбъявление типа переменной
Переменные обычно используются в арифметических или условных выражениях. Если в выражении правая часть является числом, опкод указывать не обязательно:
$var = 0
$myarray($index, 10i) >= 150Если же обе части выражения являются переменными, компилятор не сможет подобрать нужный опкод, т.к. типы переменных неизвестны.
Например, существует два опкода, которые складывают значения двух переменных: 0058 для целых чисел и 0059 для дробных.
0058: $Var1 += $Var2 // (целые числа)
0059: $Var1 += $Var2 // (дробные числа)Если убрать опкод, как скомпилировать такое выражение?
$Var1 += $Var2 // ??Чтобы сообщить компилятору тип переменной, используется ключевое слово var.
var <переменная>: <тип>Переменная - это любая допустимая глобальная или локальная переменная (см. выше).
Тип может быть одним из нижеперечисленных значений:
Integer,Int- целые числаFloat- дробные числаString,ShortString- переменная, содержащая короткий строковый литерал (используется только при объявлении массивов, для одиночных переменных используются префиксs$или суффикс@s)LongString- переменная, содержащая длинный строковый литерал (используется только при объявлении массивов, для одиночных переменных используются префиксv$или суффикс@v)<Имя класса>- переменная или массив переменных членов класса
Пример:
var $size: integerМожно объявить несколько переменных в одной строке, разделяя их запятой:
var $x: float, $y: float, $z: float Если вы предпочитаете многострочные определения, используйте конструкцию VAR..END:
var
$x: float
$y: float
$z: float
endКогда обе переменные имеют известный компилятору тип, выражение компилируется без опкода:
var
$Var1 : Integer
$Var2 : Integer
end
$Var1 += $Var2 // здесь будет опкод 0058Короткая форма объявления переменных
Начиная с версии 3.2.0 можно объявлять переменные, используя только имя типа (доступно для типов Int, Float, String, LongString).
Синтаксис:
<type> <variable name>Пример:
int 0@ // 0@ объявлена как целочисленная переменнаяНачиная с версии 3.4.0 появилась возможность объявить переменную с собственным именем:
int a
float distance
string name
a = 1
distance = 15.5
name = 'CJ'Одновременно с объявлением такой переменной можно присвоить ей начальное значение, чтобы уменьшить количество строк кода:
int a = 1
float distance = 15.5
string name = 'CJ'Компилятор связывает каждое имя с новой локальной переменной. В примере выше код будет скомпилирован примерно следующим образом:
0006: 0@ = 1
0007: 1@ = 15.5
05AA: 2@ = 'CJ'Начальное значение переменной
Одновременно с объявлением переменной можно задать ей начальное значение. Для этого напишите = и значение:
var $fVar: float = 1.0или
float $fVar = 1.0Теперь переменная $fVar объявлена как Float, и компилятор добавит в скрипт опкод 0005:
0005: $fVar = 1.0Инициализация доступна только для переменных, но не массивов.
Last updated