# Переменные

## Объяснение

**Переменные** - это контейнеры, содержащие некоторые значения/информацию. У них есть имя. Например, переменная с именем `player_health` может содержать 100, или переменная с именем `player_name` может содержать имя игрока *(«Питер», «Линдси» и т. д.)*. Зависит только от вас, что вы хотите назвать переменными и, что вы хотите хранить внутри них.

Переменная в GML может хранить:

1. Численные значения – `100`, `45.534`, `-42.2`
2. Строковые значения – `"Учитель"`, `"Питер"`
3. Логические значения – `true` или `false`

## Примеры

#### **Инициализация:**

```c
price = 50;
```

Здесь мы инициализировали переменную с именем `price`, которая содержит `20` в качестве значения. Если переменная уже была инициализирована ранее, то эта будет изменять ее значение до `20`.

{% hint style="info" %}
**Примечание:** в GML не обязательно помещать точку с запятой (`;`) после каждого утверждения. Поэтому не стесняйтесь пропустить её и сосредоточиться на главном коде.
{% endhint %}

#### П**рисвоения значения**

```c
price = 4 * 5;
price = 40 / 2;
```

#### **Увеличение значения**

```c
price += 20;
```

#### Уменьшение значения

```c
price -= 20;
```

#### Умножение или деление значения

```c
price *= 2;
price /= 2;
```

## Использование

Также вы можете использовать переменные в математических выражениях...

```
a = 4;
b = 5;
c = a + b;
```

Здесь c будет хранить **9** из-за выражения **a + b** (что означает, что **4 + 5** как a равно **4**, а **b** равно **5**).

## Различные типы переменных

### Локальные переменные

Эти переменные инициализируются ключевым словом `var`. Они сбрасываются, когда событие было инициализировано в конце. Они могут использоваться только внутри события, если только не инициализированы снова.

```c
var price = 2;
```

Этот код инициализирует локальную переменную `price`. Предположим, что событие, в котором находился этот код, было событием *Step;* то переменная может использоваться только в событии *Step*. Если вы попытаетесь использовать её без инициализации в другом событии, то она вернет ошибку, поскольку она там не существует.

### Переменные экземпляры

Это обычные переменные, которые инициализируются путем присвоения значения.

```c
price = 20;
```

Доступ к этим переменным возможен во всех событиях объекта/экземпляра, после того, как они был инициализированы.

### Глобальные переменные

Это переменные, к которым могут получить доступ все объекты в вашей игре - отсюда и название «**global**». Существует два способа создания таких переменных:

#### **Инициализация с помощью ключевого слова** `globalvar`

```c
globalvar price;
price = 2;
```

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

#### **Использование с** `global.prefix`

```c
global.price = 2;
```

Таким образом, вам не нужно инициализировать переменную с помощью `globalvar`, но вы должны использовать `global.prefix` каждый раз, когда вы хотите использовать эту переменную.

### Встроенные переменные

Есть также некоторые встроенные переменные, которые означают что-то особенное в GameMaker. Вот несколько примеров:

#### Встроенные переменные экземпляра

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

```
x: горизонтальное расположение экземпляра внутри комнаты (в пикселях)
y: вертикальное расположение экземпляра внутри комнаты (в пикселях)
speed: скорость экземпляра (в пикселях на шаг)
direction: направление, в котором экземпляр перемещается (в градусах), по умолчанию: 0
hspeed: горизонтальная скорость (в пикселях/шаг)
vspeed: вертикальная скорость (в пикселях / шаг)
image_angle: вращение спрайта (в градусах), по умолчанию: 0
image_xscale: горизонтальное масштабирование спрайта, по умолчанию: 1
image_yscale: вертикальное масштабирование спрайта, по умолчанию: 1
image_index: суб-изображения спрайта, который отображает экземпляр
image_speed: скорость, с которой спрайт меняет свои суб-изображения
sprite_index: спрайт, используемый экземпляром
```

Вы можете изменять или использовать эти переменные так же, как обычные.

```c
//изменить местоположение на 200, 150
x = 200;
y = 150;
//сделать спрайт в 2 раза больше
image_xscale = 2;
image_yscale = 2;
//вращение спрайта на 180 градусов (половину)
image_angle = 180;
```

{% hint style="info" %}
Текст, который появляется после `//`, является комментарием. Это не влияет на код; он там, чтобы вы могли объяснить, что делает ваш код, или писать важные вещи, которые вы хотели бы запомнить, глядя на ваш код.

Вы также можете написать многострочные комментарии - просто запустите их с `/*` и закончите с помощью `*/`.
{% endhint %}

#### Встроенные глобальные переменные

Эти встроенные переменные, которые являются глобальными для каждого экземпляра.

Вот несколько примеров:

```
room_speed: количество шагов, выполняемых комнатой за одну секунду, по умолчанию: 30
score: счет в вашей игре, может хранить любое числовое значение, хотя
health: здоровье вашего игрока, тоже может хранить любое числовое значение
lives: количество жизней, может также хранить любое числовое значение
```

[**Вот список всех встроенных переменных в GameMaker**](http://gamemaker.wikia.com/wiki/List_of_variables)
