Переменная в Construct 3 создаётся через контекстное меню в редакторе событий: правый клик по свободной области листа событий → пункт Add global variable — после чего откроется диалог с полями имени, типа и начального значения. Это базовая операция, без которой не обходится ни один проект: счёт очков, здоровье персонажа, количество патронов — всё это хранится именно в переменных.
В конструкторе есть три разновидности переменных: глобальные, локальные и переменные экземпляра (instance variables). Каждая из них решает свою задачу, и выбор неправильного типа — частая причина ошибок у новичков. Ниже разберём создание каждого вида, отличия между ними и типичные сценарии использования.
Создание глобальной переменной
Глобальная переменная доступна из любого события проекта. Чтобы её добавить, откройте нужный лист событий (Event sheet) и кликните правой кнопкой мыши по пустой области. В появившемся меню выберите Add global variable. Либо нажмите сочетание клавиш V — оно вызывает тот же диалог.
В окне настройки укажите три параметра: имя (только латиница, без пробелов — например, score или playerHealth), тип и начальное значение. После нажатия OK переменная появится в верхней части листа событий в виде отдельной строки, которую можно редактировать двойным кликом.
☑️ Создание глобальной переменной
Типы данных переменных
Construct 3 предлагает три типа данных, и сменить тип после создания нельзя — только удалить переменную и создать заново. Поэтому тип стоит выбирать осознанно.
| Тип | Что хранит | Пример значения | Типичное применение |
|---|---|---|---|
| Number | Числа, целые и дробные | 100, 3.5 | Очки, здоровье, скорость |
| Text | Строка символов | "Player1" | Имя игрока, сообщения |
| Boolean | Логическое значение | True / False | Флаги: «уровень пройден», «пауза» |
| Static | Опция постоянства | — | Значение не сбрасывается при рестарте |
Флажок Static в диалоге означает, что переменная сохранит своё значение между перезапусками уровня. Если флажок снят, при событии Restart layout переменная вернётся к начальному значению.
⚠️ Внимание: при удалении переменной все события и действия, которые её используют, тоже удаляются из проекта автоматически. Перед удалением проверьте, где переменная задействована — проще всего через поиск по имени в редакторе.
Локальные переменные и их отличия
Локальная переменная добавляется так же — правый клик → Add local variable, — но только внутри группы событий или под другим событием. Она видна исключительно в пределах своей области: события вне группы её не «увидят».
Зачем это нужно? Локальные переменные удобны для временных вычислений и помогают не захламлять список глобальных значений. Например, промежуточный результат расчёта урона с учётом брони логично хранить локально внутри группы «Получение урона».
Переменные экземпляра (Instance Variables)
Третий вид переменных привязан не к листу событий, а к объекту. Выделите спрайт в редакторе уровня или в панели проекта, затем в панели свойств слева найдите раздел Instance variables и нажмите Add / Edit → значок плюса. Откроется знакомый диалог: имя, тип, начальное значение.
Ключевая особенность — у каждого экземпляра объекта значение своё. Если на уровне пять врагов с переменной health, то у каждого здоровье хранится отдельно. Попадание по одному врагу уменьшит значение только у того экземпляра, который участвует в событии — это основа логики большинства игр на Construct.
- 🎯 Здоровье и урон отдельных врагов
- ⏱️ Индивидуальные таймеры и кулдауны способностей
- 🚪 Состояние объектов: открыта дверь или закрыта
- 🏃 Текущая скорость конкретного персонажа
Как изменять и читать переменные в событиях
Работа со значениями происходит через действия объекта System. Добавьте действие и выберите один из вариантов: Set value — присвоить новое значение, Add to — прибавить число, Subtract from — вычесть. Для булевых переменных доступно Toggle boolean — переключение между True и False.
Проверка значений выполняется через условия: Compare variable в объекте System позволяет сравнить переменную с числом, текстом или другой переменной. Типичная связка для счёта очков выглядит так:
Событие: Player → On collision with Coin
Действие: System → Add to → score → 1
Действие: Coin → Destroy
Типичные ошибки новичков
Первая частая проблема — использование кириллицы или пробелов в имени. Редактор не даст сохранить такое имя, поэтому сразу придерживайтесь стиля playerHealth или player_health. Вторая ошибка — попытка обратиться к локальной переменной извне её группы: её просто не будет в списке автодополнения.
- 🔤 Имя содержит пробелы или русские буквы — используйте только латиницу
- 📉 Попытка прибавить число к текстовой переменной — типы должны совпадать
- 🔄 Забытый флажок Static — значение сбрасывается при рестарте уровня
- 👥 Ожидание общего значения у instance variable — у каждой копии объекта оно своё
⚠️ Внимание: действиеReset global variablesв объекте System возвращает все глобальные переменные к начальным значениям. Не путайте его сRestart layout— это разные механизмы, и их комбинация может неожиданно обнулить прогресс игрока.
Как организовать много переменных
Когда переменных становится больше десятка, группируйте их по смыслу с помощью комментариев в листе событий. Альтернатива — хранить связанные данные в объекте Dictionary или массиве Array: они позволяют держать наборы значений под одним именем и удобны для инвентаря или таблиц рекордов.
Практический пример: здоровье игрока
Соберём простую систему здоровья. Создайте глобальную переменную health типа Number со значением 100. Добавьте событие столкновения игрока с врагом, в котором вычитается урон, и отдельное условие проверки гибели персонажа:
Событие: Player → On collision with Enemy
Действие: System → Subtract from → health → 25
Событие: System → Compare variable → health ≤ 0
Действие: Player → Destroy
Проверьте результат в режиме предпросмотра: при каждом касании врага здоровье должно уменьшаться, а при достижении нуля персонаж исчезнет. Если здоровье не меняется, убедитесь, что в действии выбрана именно ваша переменная, а не созданная случайно дублирующая.
Часто задаваемые вопросы
Можно ли изменить тип переменной после создания?
Нет, тип задаётся один раз при создании. Чтобы сменить тип, удалите переменную и создайте новую с тем же именем. Учтите: при удалении пропадут все события, где она использовалась, поэтому сначала запомните или заскриньте связанные блоки.
Чем глобальная переменная отличается от переменной экземпляра?
Глобальная существует в единственном числе на весь проект. Переменная экземпляра привязана к объекту, и у каждой его копии на уровне значение собственное: у десяти врагов будет десять независимых значений здоровья.
Почему переменная сбрасывается при переходе на другой уровень?
Возможная причина — снятый флажок Static в настройках переменной либо вызов действия Reset global variables в событиях. Глобальные переменные с включённым Static сохраняют значение между уровнями.
Как вывести значение переменной на экран в игре?
Добавьте объект Text и в событии Every tick задайте действие Set text со значением переменной. Для склейки текста и числа используйте амперсанд: "HP: " & health.
Есть ли горячая клавиша для создания переменной?
Да, в редакторе событий нажатие клавиши V открывает диалог добавления глобальной переменной. Это быстрее, чем поиск пункта в контекстном меню.