
- •Содержание:
- •Переменные:
- •Логические Операторы и Операции:
- •Логическое && и.
- •Логическое || или
- •Оператор побитового Или |
- •Оператор побитового и &
- •Оператор Круглые Скобки ()
- •Стандартные События объекта.
- •Условные операторы и Конструкции.
- •Условный оператор if..Else:
- •Оператор switch (Переключатель)
- •Конструкция with:
- •Операторы Цикла.
- •Оператор цикла while:
- •Оператор цикла do:
- •Оператор цикла for:
- •Оператор повторения repeat:
- •Функции:
- •Операторы прерывания: «break, exit, continue»:
- •Краткая информация: dll (Dynamic Link Library) библиотеки расширения:
- •Структуры данных:
- •Частицы (Эффекты):
- •Многопользовательские игры (с использованием стандартных средств):
- •3D Графика (3d Режим):
- •Как найти быстро нужную функцию по справке и где её использовать (По логике):
- •Начало:
- •Давняя традиция «Hello World!» или «Привет Мир!»:
- •Работа с текстом:
- •Работа с Числами (Уровень игрока):
- •Создаем «Healthbar» (Индикатор уровня здоровья):
- •Движение в 4 стороны:
- •Drag&Drop или “Тяни и кидай”:
- •Башня с пушкой:
Автор: Сысов В.В.
Название: «Game Maker – Делюсь опытом».
Содержание:
Переменные.
Логические Операторы и Операции.
Логическое && И.
Логическое || ИЛИ
Логическое исключающее ^^ ИЛИ
Логический оператор Меньше <
Логический оператор Меньше или Равно <=
Логический оператор Сравнения ==
Логический оператор сравнения на Неравность !=
Логический оператор Больше >
Логический оператор Больше или Равно >=
Оператор побитового Или |
Оператор побитового И &
Оператор Побитовое исключающее ИЛИ ^ xor
Оператор Побитового сдвига влево <<
Оператор Побитового сдвига вправо >>
Оператор Сложения +
Оператор Вычитания –
Оператор Умножения *
Оператор Деления /
Оператор div
Оператор mod Вычисление остатка от деления
Унарный оператор Отрицания !
Унарный оператор –
Оператор побитового отрицания ~
Оператор Круглые Скобки ()
Оператор Присваивания =
Оператор Присваивания со Сложением +=
Оператор Присваивания с Вычитанием -=
Оператор Присваивания с Умножением *=
И оператор Присваивания с Делением /=
Стандартные События объекта.
Условные операторы и Конструкции.
Условный оператор if..else:
Оператор switch (Переключатель)
Конструкция with:
Операторы Цикла.
Оператор цикла while:
Оператор цикла do:
Оператор цикла for:
Оператор повторения repeat:
Функции:
Операторы прерывания: «break, exit, continue»:
Краткая информация:
DLL (Dynamic Link Library) библиотеки расширения:
Структуры данных:
Частицы (Эффекты):
Многопользовательские игры (С использованием стандартных средств):
3D Графика (3D Режим):
Как найти быстро нужную функцию по справке и где её использовать (По логике):
Начало:
Давняя традиция «Hello World!» или «Привет Мир!»:
Работа с текстом:
Работа с Числами (Уровень игрока):
Создаем «Healthbar» (Индикатор уровня здоровья):
Движение в 4 стороны:
Drag&Drop или “Тяни и кидай”:
Башня с пушкой:
Задачи:
Задача №1
Задача №2
Задача №3
Задача №4
Задача №5
Задача №6
Задача №7
Задача №8
Задача №9
Задача №10
Делюсь опытом и стараюсь, что бы вы поняли, как с этим работать.
Хочу сказать, что эти статьи будут содержать в себе учение GML (Game Maker Language) а так же, многие частые ошибки.
И давайте сразу начнем учение, дабы не терять времени.
С чего я хочу начать? Хочу начать с того, что не стоит сразу летать в облаках и мечтать о создании огромной игры, а ещё и MMORPG.
Сейчас мы игры отставим в сторону, и будем учиться, постараемся понять, за счет чего в игре всё оживает и процветает.
Ещё хочу дополнить, вы должны отнестись к этому с полной серьезностью, иначе, это изучение не даст эффекта, строго придерживайтесь листинга, читайте всё и старайтесь понять всё до мелочей.
Если вы в чем-то не полностью уверены, не разобрались, не стоит продолжать, разберитесь с первым, затем начинайте второе.
Начнем мы с переменных.
Переменные:
Переменная хранится в оперативной памяти компьютера, у переменной есть адрес, области, в которой она хранится, примерно, если переменная типа double занимает 64 бита.
Давайте я покажу примерно, как выглядит это в памяти: 0010 0100 это значение 36.
Где 8 значений это биты, а 8 бит это 1 байт, но не везде.
Нули Отрицательные, а Единицы Положительные. Но об этом читайте подробно на Википедии.
У переменной есть имя, по которой мы к ней можем обратиться, и не только обратиться, а и взять значение которое она хранит в себе, или изменить его.
В «Game Maker» есть три вида переменных:
Локальная (Локальную переменную видно только в своём объекте).
Глобальна (Глобальная переменная доступна с любой точки программы, игры).
Временная (Временная переменная существует на протяжении выполнения кода).
Хочу вас предупредить, что в «Game Maker» нет типов данных как таковых, но ошибку можно вызвать и так и так. Возможно, вы не знаете что такое Тип данных, поэтому я должен объяснить вам это, поскольку в «Game Maker» есть два типа double и string.
Но вы их не объявляете перед именем переменной, как это делается во многих других языках программирования, в GML (Game Maker Language) это не надо делать.
Но знать что такое «Тип Данных» необходимо, так как есть некоторые случаи, когда сравнение двух разных типов, приводят к неожиданным результатам, и ошибкам.
Так что такое тип и что он из себя представляет?
Тип это то, что определяет, их размерность, и вообще как они представлены в памяти компьютера, и что они могут хранить в себе.
Например, тип double хранит в себе Числа с точкой «0.0», а тип string Символы «Hello», но это совсем не значит, что вы должны писать числа с точкой.
Повторюсь, о переменных подробней можно прочитать на «Википедии», я рекомендую вам ознакомиться с этим.
Если записать тип Числовых данных в функцию без преобразования типа:
draw_text(x,y,”Number is: ”+number); // number переменная типа double.
То вы получите ошибку, и это правильно, поскольку не происходит явного или неявного преобразования одного типа в другой. Нам надо, записать это, преобразовав тип Числовых данных, в тип Строковых, таким образом:
draw_text(x,y,”Number is: ”+string(number)); // Функция string(str) конвертирует Числа в Строки (в Символы).
Теперь всё будет работать, если переменная number хранит в себе Строку то, преобразовывать ничего не надо.
Есть смысл называть переменные своими осмысленными именами, легче понимается My_Level чем просто L или awij23.
Переменные не должны начинаться со знаков типа «!@#$%^&*()+/*-» Переменные должны начинаться с букв, можно начать с нижнего подчеркивания «_myVar» так же можно употреблять в названии переменной и Цифры, но, в конце _My_Level01, не важно переменная начинается с большей буквы или с маленькой. Очень важно это помнить.
Давайте я приведу вам несколько примеров ошибочных объявлений и правильных:
0myage = 18; // Ошибка! Переменная не должна начинаться с Цифры.
myage0 = 18; // Правильно! Поскольку, Цифра есть в конце имени а не в начале.
my age = 18; // Ошибка! Имя переменной не должно содержать пробелов.
!myage = 18; // Ошибка! Имя не должно, содержать каких либо знаков.
myage! = 18; // Ошибка! Имя не должно, содержать каких либо знаков.
myage = 18; // Правильно! Поскольку имя переменной состоит только из Букв.
my_age = 18; // Правильно, поскольку нижнее подчеркивание разрешенный знак, так же, нижнее подчеркивание можно ставить вначале или в конце имени переменной.
_my_Age01_12 = 18; // Правильно, поскольку не нарушает правил имен переменных, а наоборот, следует им.
Хочу отметить, что при обращении к переменной, её имя должно полностью повторять имя при объявлении, если вы написали myVar, то myVar вы и должны писать, что бы обратиться к этой переменной.
Если вы объявили myVar переменную, а потом обращаетесь к ней, упустив большую букву в имени myvar, то это вызовет сообщение об ошибке, а именно о том, что такой переменной не существует, поскольку myVar и myvar две совершенно разные переменные.
Так же, хочу сказать, что если вы объявили переменную, а затем объявляете ещё одну с таким же именем, то у вас не получится то, что вы задумали.
Потому что, после объявления переменной, её будет уже видно, и компилятор не объявит ещё одну такую, а просто присвоит ей новое значение.
Это случится:
Если мы объявим две переменные с одинаковыми именами, в одном объекте, локально.
Если мы объявим две переменные с одинаковыми именами в двух разных или в одном объекте глобально.
Приведу пример, тут я объявил локальную переменную, выглядит она следующим образом:
«Имя Переменной» = «Значение»; // Закрывается точкой с запятой, но в GML этого можно не делать.
И так, давайте посмотрим:
my_Name = “Victor”; // Объявляем и присваиваем значение.
my_Name = “Victoriya”; // Присваиваем новое значение.
В итоге my_Name будет равна Victoriya, поскольку мы присваиваем этой переменной новое значение, а не объявляем новую переменную, но это не такая развитая ошибка как с Глобальными переменными:
Но сначала, я хочу разъяснить вам, что есть два вида глобальных переменных, но они, по сути, ничем не отличаются друг от друга.
Объявление Глобальной переменной происходит следующим образом:
Ключевое Слово «global» «точка» «Имя Переменной» = «Значение»;
Или такой вариант:
Ключевое Слово «globalvar» «Пробел» «Имя Переменной»;
Давайте, я приведу пример:
global.myage = 18; // Ключевое Слово «global» «точка» «Имя Переменной» = «Значение»;
И второй вариант:
globalvar myage; // Ключевое Слово «globalvar» «Пробел» «Имя Переменной»;
В данном случае, Инициализация (Присваивание) значения происходит ниже объявления.
Пример:
globalvar myage; // Ключевое Слово «globalvar» «Пробел» «Имя Переменной»;
myage = 18; // Инициализация (Присваивание), при таком объявлении, можно и не присваивать значение.
Но это не все прелести, можно объявить сразу несколько глобальных переменных:
globalvar myage, yourage;
Порядок таков:
Ключевое Слово «globalvar» «Пробел» «Имя Переменной» «запятая» «Имя Переменной»;
Очень полезно подписывать префикс, перед именем глобальной переменной, что бы знать, что она является глобальной. Тогда мы можем записать это следующим образом:
globalvar glob_myAge, glob_yourAge;
Теперь из-а префикса glob нам понятно, что эта переменная глобальна.
Есть ещё некий вид переменной, где есть ключевое слово var.
Это хорошо использовать там, где нужны временные переменные, объявляется она следующим образом:
Ключевое Слово «var» «Пробел» «Имя Переменной»;
Так же, можно объявить сразу несколько переменных.
Ключевое Слово «var» «Пробел» «Имя Переменной» «Запятая» «Имя Переменной»;
Приведу пример:
var myage, yourage;
Просто запомните, что глобальные переменные с одинаковыми именами, нельзя объявить дважды, на самом деле, ей присвоится новое значение.
Так же, имена переменных не должны совпадать с именами ресурсов.
Ресурсы – тут подразумевается, Объекты (Objects), Спрайты (Sprites), Комнаты (Rooms) и другие.
Так же, в «Game Maker» есть Константные переменные, что такое константная переменная?
Всё очень просто, константную переменную нельзя изменить, если даже вы и попытаетесь это сделать, то это приведет к ошибке.
Обычно имена констант пишутся ЗАГЛАВННЫМИ буквами, так вы знаете, что это константа и её нельзя изменять.
Но константы не объявляются в коде.
Что бы объявить константу сделайте следующее: Выберите Define Constants (Определить константы) из меню Resources (Ресурсы). В колонке Name (Имя) введите имя константы, а напротив её значение.
Константы будут Глобальны, и жить на протяжении, пока игра запущена.
В «Game Maker» есть и такие переменные как Массив.
Что такое Массив?
Но сначала скажу, что Массивы есть, начиная с Одномерного, и заканчивая Многомерным.
Стандартно, первый элемент (Индекс) Массива, начинается с нуля, главное не забывать об этом.
Максимальный размер массива в индексах 32000, но этого достаточно.
Как посоветовали мне написать, что Массив это «Набор пронумерованных переменных», и да, это куда понятнее выглядит.
Давайте, я покажу это на примере, объявим одномерный Массив, и присвоим четырем его элементам какое-то значение:
myArray[0] = 10;
myArray[1] = 1;
myArray[2] = 90;
myArray[3] = 180;
Где myArray это всего лишь имя, как и у всех переменных, а 0 в квадратных скобках это Индекс массива. Далее, мы присвоили значение 10 переменной под нулевым индексом, затем другим трем индексам.
Давайте посмотрим, как выглядит это в массиве:
Индекс : 0 | 1 | 2 | 3 |
Значение : 10 | 1 | 90| 180|
Что бы считать какое-то значение с массива, нужно указать Индекс под каким находится нужное вам значение.
Куда вы? Это ещё не всё, давайте рассмотрим Двумерный Массив:
Но сначала как всегда, скажу, что у Двумерного массива есть два индекса, а не один, собственно из-а чего он и двумерный. Приведу пример myArray[Индекс1,Индекс2]:
myArray[0,0] = 10;
myArray[0,1] = 15;
myArray[1,0] = 10;
myArray[1,1] = 15;
То тогда это будет выглядеть следующим образом:
Индекс1 : 0 |0 |1 |1 |
Индекс2 : 0 |1 |0 |1 |
Значение : 10 |15 |10 |15 |
Что бы считать какое-то значение с двумерного массива, нужно указать оба индекса под какими находится нужное вам значение.
Это пригодилось мне, когда я делал Морской бой онлайн, у меня Индекс1 считался идентификатором для массива ячеек в которых хранились данные о клетке уровня морского боя, во втором индексе (Индекс2). Там хранились только значения 0 или 1, что значило, есть на этой клетке Корабль или нет. Проект забросил, самому, просто надоело.
Запомните, что переменная это как будто, просто какое-то не определенное значение, у меня Item_id = 1; может значить Автобус, а item_id = 2 Помидор. Это всё зависит от того как вы представляете себе эти данные, и конечно же поставленные Условия, о которых я расскажу вам позже.
Давайте познакомимся с логическими операторами и не только.