Перейти к содержимому

Окно переменных

Единственное место, которое говорит правду о том, что программа насчитала

В mlog нет ни сообщений об ошибках, ни падений. Программа с опечаткой не жалуется — она молча считает не то. Поэтому вторая по важности кнопка под окном программы — «Переменные»: она показывает содержимое памяти процессора в этот момент.

На страницах курса эта таблица всегда открыта справа от строк: в примере заглядывать в неё приходится чаще, чем в игре.

Строка таблицы — три ячейки: имя, значение, тип. Тип игра называет своим словом и красит своим цветом:

Тип Что это
number число
null пусто: переменную ни разу не записали
string текст в кавычках
content предмет, жидкость, блок или тип юнита
building здание — то, что даёт связь
unit юнит
team команда
enum значение из списка, вроде enabled

Первым в таблице обычно идёт @counter — номер строки, которая выполнится следующей. Дальше ваши переменные в том порядке, в каком они впервые встретились в программе.

Константы в таблицу не попадают: @copper, @this, @ipt, @links и имена связей (cell1, switch1) в ней не появятся — они не меняются, показывать там нечего.

Их список открывается кнопкой «Встроенные переменные» в том же окне; у нас он лежит на странице встроенных переменных.

В примере ниже программа из прошлых уроков, но с одной буквой не на месте: во второй строке написано запс, а не запас. Нажмите «пуск» и посмотрите в таблицу.

тик 0
Установить0
=
Операция1
=
Операция2
=
@counter0number
запасnullnull
удвоеноnullnull
запсnullnull
итогnullnull

итог равен пяти вместо двадцати пяти. Почему — видно там же:

  • запс — лишняя строка со значением null. Имени, которого не присваивали, mlog заводит свою переменную и кладёт туда null. Незнакомое имя для него не ошибка, а новая переменная.
  • удвоено равно нулю. В арифметике null считается нулём: ноль на два — ноль.
  • итог равен пяти. Ноль плюс пять. Программа отработала честно, просто не с тем числом.

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

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

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

В примерах курса таблица обновляется каждый кадр, а кнопка «шаг» даёт посмотреть ровно на одну инструкцию — в игре так нельзя.

Разбор ошибок посложнее — в уроке «Когда не работает».

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.