Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GM - Делюсь опытом (Часть первая).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
344.82 Кб
Скачать

Автор: Сысов В.В.

Название: «Game Maker – Делюсь опытом».

Содержание:

  1. Переменные.

  2. Логические Операторы и Операции.

  1. Логическое && И.

  2. Логическое || ИЛИ

  3. Логическое исключающее ^^ ИЛИ

  4. Логический оператор Меньше <

  5. Логический оператор Меньше или Равно <=

  6. Логический оператор Сравнения ==

  7. Логический оператор сравнения на Неравность !=

  8. Логический оператор Больше >

  9. Логический оператор Больше или Равно >=

  10. Оператор побитового Или |

  11. Оператор побитового И &

  12. Оператор Побитовое исключающее ИЛИ ^ xor

  13. Оператор Побитового сдвига влево <<

  14. Оператор Побитового сдвига вправо >>

  15. Оператор Сложения +

  16. Оператор Вычитания –

  17. Оператор Умножения *

  18. Оператор Деления /

  19. Оператор div

  20. Оператор mod Вычисление остатка от деления

  21. Унарный оператор Отрицания !

  22. Унарный оператор –

  23. Оператор побитового отрицания ~

  24. Оператор Круглые Скобки ()

  25. Оператор Присваивания =

  26. Оператор Присваивания со Сложением +=

  27. Оператор Присваивания с Вычитанием -=

  28. Оператор Присваивания с Умножением *=

  29. И оператор Присваивания с Делением /=

  1. Стандартные События объекта.

  2. Условные операторы и Конструкции.

  1. Условный оператор if..else:

  2. Оператор switch (Переключатель)

  3. Конструкция with:

  1. Операторы Цикла.

  1. Оператор цикла while:

  2. Оператор цикла do:

  3. Оператор цикла for:

  4. Оператор повторения repeat:

  1. Функции:

  2. Операторы прерывания: «break, exit, continue»:

  3. Краткая информация:

  1. DLL (Dynamic Link Library) библиотеки расширения:

  2. Структуры данных:

  3. Частицы (Эффекты):

  4. Многопользовательские игры (С использованием стандартных средств):

  5. 3D Графика (3D Режим):

  6. Как найти быстро нужную функцию по справке и где её использовать (По логике):

  1. Начало:

  1. Давняя традиция «Hello World!» или «Привет Мир!»:

  2. Работа с текстом:

  3. Работа с Числами (Уровень игрока):

  4. Создаем «Healthbar» (Индикатор уровня здоровья):

  5. Движение в 4 стороны:

  6. Drag&Drop или “Тяни и кидай”:

  7. Башня с пушкой:

  8. Задачи:

  1. Задача №1

  2. Задача №2

  3. Задача №3

  4. Задача №4

  5. Задача №5

  6. Задача №6

  7. Задача №7

  8. Задача №8

  9. Задача №9

  10. Задача №10

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

Хочу сказать, что эти статьи будут содержать в себе учение GML (Game Maker Language) а так же, многие частые ошибки.

И давайте сразу начнем учение, дабы не терять времени.

С чего я хочу начать? Хочу начать с того, что не стоит сразу летать в облаках и мечтать о создании огромной игры, а ещё и MMORPG.

Сейчас мы игры отставим в сторону, и будем учиться, постараемся понять, за счет чего в игре всё оживает и процветает.

Ещё хочу дополнить, вы должны отнестись к этому с полной серьезностью, иначе, это изучение не даст эффекта, строго придерживайтесь листинга, читайте всё и старайтесь понять всё до мелочей.

Если вы в чем-то не полностью уверены, не разобрались, не стоит продолжать, разберитесь с первым, затем начинайте второе.

Начнем мы с переменных.

Переменные:

Переменная хранится в оперативной памяти компьютера, у переменной есть адрес, области, в которой она хранится, примерно, если переменная типа double занимает 64 бита.

Давайте я покажу примерно, как выглядит это в памяти: 0010 0100 это значение 36.

Где 8 значений это биты, а 8 бит это 1 байт, но не везде.

Нули Отрицательные, а Единицы Положительные. Но об этом читайте подробно на Википедии.

У переменной есть имя, по которой мы к ней можем обратиться, и не только обратиться, а и взять значение которое она хранит в себе, или изменить его.

В «Game Maker» есть три вида переменных:

  1. Локальная (Локальную переменную видно только в своём объекте).

  2. Глобальна (Глобальная переменная доступна с любой точки программы, игры).

  3. Временная (Временная переменная существует на протяжении выполнения кода).

Хочу вас предупредить, что в «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 две совершенно разные переменные.

Так же, хочу сказать, что если вы объявили переменную, а затем объявляете ещё одну с таким же именем, то у вас не получится то, что вы задумали.

Потому что, после объявления переменной, её будет уже видно, и компилятор не объявит ещё одну такую, а просто присвоит ей новое значение.

Это случится:

  1. Если мы объявим две переменные с одинаковыми именами, в одном объекте, локально.

  2. Если мы объявим две переменные с одинаковыми именами в двух разных или в одном объекте глобально.

Приведу пример, тут я объявил локальную переменную, выглядит она следующим образом:

«Имя Переменной» = «Значение»; // Закрывается точкой с запятой, но в 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 Помидор. Это всё зависит от того как вы представляете себе эти данные, и конечно же поставленные Условия, о которых я расскажу вам позже.

Давайте познакомимся с логическими операторами и не только.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]