Любая программа, а значит и игра, состоит из двух частей: переменные (данные) и операторы (команды) для работы с переменными. Переменная - это какое-либо значение или число, хранящееся в памяти компьютера, а в некоторых языках программирования (в том числе и GML) переменной может быть и строка символов, например "Антарктида". Каждая созданная программистом переменная должна иметь свое имя, которым программист будет пользоваться при написании программы.
Имя переменной может содержать буквы латинского алфавита, цифры и знак подчеркивания "_", но начинаться имя переменной может только на букву. Например: health_1 - допустимое имя x - допустимое _y - не допустимое, т.к. начинается не на букву read! - не допустимое (используется запрещенный символ "!") 1x - не допустимое, т.к. начинается не на букву
Теперь рассмотрим оператор присваивания. Он позволяет изменять значение переменной и в коде программы обозначается как знак равенства "=" и изменяет значение переменной, стоящей слева от него, на значение, стоящее справа.
Итак, вот код небольшого скрипта:
{ a=5; b='Game'; b=a; }
Разберем его подробно: Весь код должен находиться в фигурных скобках "{}". Они нужны для обозначения блока команд скрипта. Далее идет строка "a=5;", в которой создается переменная с именем "a", содержащая число 5. Так же в этой строке есть символ ";", которым желательно заканчивать каждое выражение. В следующей строке создается переменная "b", содержащая строку "Game". В предпоследней строке переменной "b" присваивается значение переменной "a". В итоге, после выполнения данного скрипта, будет создано две переменные, содержащие число 5.
Рассмотрим следующий скрипт:
{ a=b; }
Этот код работать не будет и выдаст ошибку, потому что, создается две переменные "a" и "b", но переменной "b" еще не присвоено значение и по этому оператор присваивания не может изменить переменную "a". Но этой ошибки можно избежать: Откройте в Game maker'е окно "Глобальные игровые настройки" и на вкладке "Ошибки" поставьте галочку для "Обращаться с не инициализированными переменными как с 0". Теперь, когда будет создаваться переменная, ей сразу будет присвоено число 0, а значит вышеприведенный код не выдаст ошибки и в результате его работы будет создано две переменные со значением 0.
Есть еще несколько разновидностей оператора присваивания: a+=b - к переменной "a" прибавляет переменную "b" a-=b - вычитает из "a" переменную "b" a*=b - умножает "a" на "b" a/=b - делит "a" на "b"
Вот пример использования этих операторов:
{ a=0; b=5; a+=b; //теперь "a" равно 5 b*=a; //теперь "b" равно 25 b/=2; //теперь "b" равно 12.5 }
Для работы с переменными еще используются арифметические операции: сложение, вычитание, умножение, деление, деление без остатка и вычисление остатка от деления. Обозначаются как"+", "-", "*", "/", "div" и "mod". Пример:
{ a=5; b=6; c=a+b; a=c*b-b; a-=(b+c)/(b-c+6); c=a mod 5; }
Круглые скобки определяют приоритет содержащегося в них выражения. Выражение, находящееся в скобках выполнится в первую очередь, а потом уже все остальные.
В Game Maker'е скрипты выполняются в качестве действия на событие объекта, а это значит, что один скрипт может выполняться для нескольких объектов. Объясню на простом примере какие это открывает возможности и как это влияет на объекты: У нас есть два объекта - "ball" и "sky", к каждому из них по одному разу выполнится следующий скрипт:
{ k=5; }
Всего будет создано две разные переменные с именем "k", но находиться они будут в разных местах: одна переменная "внутри" объекта "ball", а другая в объекте "sky". Теперь выполним следующий скрипт для объекта "ball":
{ k+=1; }
В результате изменится только одна переменная, находящаяся объекте "ball", а переменная "k", находящаяся в объекте "sky", не будет изменена, потому что скрипт был выполнен только для объекта "ball". Для того, чтобы, выполняя скрипт для объекта "ball", повлиять на переменную, находящуюся в объекте "sky", перед именем этой переменной надо приписать имя нужного объекта и точку вот таким образом:
{ sky.k+=1; }
Теперь если выполнить этот скрипт для объекта "ball", изменится только переменная, находящаяся внутри объекта "sky". Если в комнате присутствует сразу несколько объектов "sky" и во всех них есть своя переменная "k", то изменится переменная только в одном из этих объектов. В каком именно объекте "sky" изменить переменную - решает компьютер и, скорее всего, он выберет для этого тот объект, который был создан раньше всех.
Некоторые переменные в объектах уже созданы и они могут влиять на сам объект. Например в каждом объекте есть переменная "x", которая хранит координату объекта по горизонтали. Если изменить эту переменную, то изменится и положение самого объекта. Есть и аналогичная переменная "y" с координатой по вертикали. Внимание! Оси координат в Game Maker направлены не так, как принято в геометрии: тут ось Y направлена вниз, а начало координат находится в левом верхнем углу окна.
Вот еще некоторые наиболее необходимые переменные объектов: id - индивидуальный номер объекта. Изменять нельзя, он используется только для обращения к объекту по его номеру (иногда так к нему обращаться удобнее, чем по имени). depth - слой, на котором рисуется объект. Изменяйте эту переменную, чтобы объект рисовался перед или за другими объектами. image_alpha - прозрачность спрайта объекта. Может быть любое значение от 0 до 1, где 0 - это полностью прозрачный спрайт, а 1 - не прозрачный. Например, присвойте этой переменной значение 0.5, чтобы спрайт объекта стал полупрозрачным. image_angle - угол наклона спрайта объекта в градусах. image_xscale - относительный размер спрайта объекта по горизонтали. 100%-й масштаб равен 1. image_yscale - то-же по вертикали. xstart - x координата, в которой был создан объект. ystart - y координата. Более полный список переменных можно посмотреть в "Скрипты"->"Показать встроенные переменные".
Также, кроме переменных внутри объектов, есть и глобальные переменные. Чтобы упростить понимание сути глобальных переменных, представьте объект (или некий контейнер), который существует в течении всей игры, содержит в себе стандартные и пользовательские переменные и называется "global". Обращаться с ним как с объектом нельзя, да и стандартные переменные у него другие. Глобальные переменные имеют преимущества перед переменными, находящимися внутри объектов: к ним, зачастую, легче обращаться и они существуют в течении всей игры, когда переменные объектов могут быть удалены вместе со своими объектами. Обращаться к глобальным переменным очень просто: перед названием переменной надо написать "global.", например:
Вот некоторые стандартные глобальные переменные (к ним можно обращаться без приставки "global."): background_color - код цвета фона. current_day - эта и несколько следующих переменных хранят информацию о дате и времени. current_hour current_minute current_month current_second current_time current_weekday current_year fps - количество кадров в секунду (frames per second) mouse_x - x координата положения курсора мыши. mouse_y - y координата положения курсора мыши. Более полный список глобальных переменных можно посмотреть в "Скрипты"->"Показать встроенные переменные".
Пример 1_1 В этом примере рассматривается влияние на переменные объекта другим объектом. 1) Загрузите в проект два разных спрайта и назовите их "sp1" и "sp2". 2) Создайте два объекта "obj1" и "obj2", затем присвойте им спрайты "sp1" и "sp2" соответственно. 3) Создайте комнату и разместите на ней два экземпляра объекта "obj1" и один экземпляр объекта "obj2" 4) Создайте скрипт с именем "sc1", содержащий код:
{ sp2.x+=4; //двигаем объект "obj2" вправо x-=4; //двигаем в право объект, для которого выполняется этот скрипт }
5) Для объекта "obj1" добавьте событие "Мышь - левая кнопка" и, в качестве действия на него, выберите выполнение скрипта "sc1" (вкладка "control", действие "Execute Script", в появившемся окне в поле "script" напишите "sc1" и нажмите ОК). 6) Запустите проект и нажимайте на объекты "obj1"
Пример 1_2 Этот пример демонстрирует работу с глобальными переменными. 1) Создайте спрайт "sp1". 2) Создайте объект "obj1" и примените к нему спрайт "sp1". 3) Создайте комнату и разместите в ней несколько объектов "obj1" 4) В свойствах комнаты выберите вкладку "Установки" и нажмите кнопку "Создать код". В появившемся окне разместите следующий скрипт:
6) Для объекта "obj1" добавьте событие "Мышь - левая кнопка" и, в качестве действия на него, выберите выполнение скрипта "sc1". 7) Запустите проект и нажимайте на объекты "obj1"
Пример 1_3 Демонстрирует работу со стандартными переменными объектов. 1) Создайте спрайт "sp1". 2) Создайте объект "obj1" и примените к нему спрайт "sp1". 3) Создайте комнату и разместите в ней один экземпляр объекта "obj1" 4) Создайте скрипт "sc1" с кодом:
{ x=mouse_x; y=mouse_y; }
5) Для объекта "obj1" добавьте событие "Шаг - Шаг" и, в качестве действия на него, выберите выполнение скрипта "sc1". 6) Запустите проект и поводите мышкой по полю.