Game Maker Language (GML) — інтерпретована мова програмування, розроблений для використання разом з програмою для розробки комп'ютерних ігор: Game Maker . Спочатку підтримка мови була впроваджена в Game Maker Марком Овермарс для доповнення системи кнопкових подій, проте пізніше всі кнопкові події були включені в GML, дозволяючи програмісту уникнути використання кнопкових функцій. GML сильно пов'язаний з середовищем Game Maker. Game Maker організований так, щоб не було необхідності програмування вручну таких речей, як управління подіями, дизайн рівнів і настройка об'єктів. Існує хибна думка, що GML підтримує вставки фрагментів коду на інших мовах, таких як Pascal, Assembler або . Помилка виникла через часткову схожість синтаксису GML з Pascal і C ++. (Наприклад, оператор «&&» може бути замінений на «and»).
Бібліотека
В Game Maker сукупність кнопкових подій утворює бібліотеку. В інтерфейсі програми бібліотеки відображаються як закладки, в яких знаходяться різні іконки подій. Кожне таке подія - це GML- скрипт або функція, яку користувач може використовувати в грі. В поставку Game Maker входять кілька стандартних бібліотек, які містять основні події, які використовуються в більшості ігор. Також існує можливість створювати свої власні бібліотеки, використовуючи Library Maker . У GMS2 вбудований механізм конвертації дій, заданих «кнопками», в код GML і назад, що дозволяє новачкам швидше перейти на GML і покращує розуміння того, як працюють стандартні дії.
Синтаксис і семантика GML
GML структурно схожий на мову С своїми блоками коду, викликами функцій, привласненням змінних, синтаксисом операторів і так далі. GML розрізняє оператори і вирази. Наприклад,
g < 1;
не є правильним оператором і викличе помилку. Також, присвоювання змінних - це завжди оператор, і тому не може бути використаний в виразах. Наприклад, наступний рядок завжди генерувала б помилку тому, що вона б обчислювала вкладене вираз як true або false, а потім порівнювала б булевий результат з рядком «Yes» (неправильне порівняння):
if ((answer = get_string("Yes or No?", "")) == "Yes")
Варто пам'ятати, що знак рівності «=» є оператором присвоєння і булевих оператором порівняння в виразах, тоді як в С ++ у виразах пишуть подвійний знак «==». Проте, подвійний знак одно «==» буде правильно інтерпретований в разі використання його в виразах. Використання такого знака в якості оператора присвоєння викличе помилку виконання. GML також підтримує оператори інкремента :
g ++; // підтримується як Постфіксний, так і префиксная запис
і
g += 1;
те ж саме, що і
g = g + 1;
Також існують оператори: - =, * =, / =, | =, & = і ^ =. Починаючи з GMS2 введена підтримка тернарного оператора?:. Оператори в GML можуть бути розділені крапкою з комою, однак це не є обов'язковою умовою (хоча і може привести до помилки в деяких специфічних випадках).
Функції
Game Maker містить велику бібліотеку вбудованих функцій для забезпечення основної функціональності. Програміст може створювати свої власні скрипти, які викликаються точно таким же способом, як і функції. Функції малювання в Game Maker використовують Direct3D API . При необхідності Game Maker також дозволяє викликати нативний код платформи за допомогою розширень (DLL на Windows, Java на Android, JS на HTML5 і т. п).
Використання
Зазвичай, GML не потрібно попередньо оголошувати змінну, як це робиться в деяких інших мовах. Мінлива створюється автоматично, відразу після присвоєння їй жодного значення:
foo = "bar";
В Game Maker є багато вбудованих змінних і констант. Кожен екземпляр об'єкта містить багато локальних змінних, наприклад «х» і «у». Також існує кілька вбудованих глобальних змінних, наприклад «score». Ці змінні існують незалежно від примірників об'єктів. Ці змінні не містять префіксу «global.», На відміну від глобальних змінних, зазначених програмістом. Одномірні і двовимірні масиви також підтримуються.
Структури даних
У GML є функції для створення і редагування структур даних шести типів: стек, чергу, список, карта (асоціативний масив), пріоритетна чергу і сітка. До сітці, списку і карті також є можливість доступу за допомогою аксессор, що надають синтаксис, подібний масивів:
var value = list[| 0]; // вместо ds_list_find_value(list, 0) map[? "name"] = "Username"; // вместо ds_map_add(map, "name", "Username") var value = map[? "name"]; // вместо ds_map_find_value(map, "name");
Типи
У GML підтримуються наступні типи даних:
- string (рядок) - послідовність символів, укладених в одинарні або подвійні лапки (починаючи з GMS2 слід використовувати подвійні лапки).
- real (число) - ціле або з плаваючою комою. Хоча все значення, створені в GML, зберігаються як числа з плаваючою комою подвійної точності, для роботи з розширеннями можна використовувати і інші типи
- array (масив) - змінна, яка використовує індекси для доступу до елементів. Можуть містити будь-які дані - числа, рядки, інші масиви, дескриптори інших структур даних і т.п. Їх також можна передати як параметр у функцію, і вони можуть бути повернуті функцією як результат.
- boolean - може приймати значення true або false. Майте на увазі, що в даний час GML не підтримує «справжні» булеві значення і насправді приймає як false будь-які числа менше 0.5, а все, що дорівнює або більше - як true.
- pointer (покажчик) - покажчик на область пам'яті. Використовується в деяких специфічних функціях на кшталт buffer_get_address () і ін.
- enum (перерахування) - задана користувачем колекція констант, що зберігаються в змінної.
- undefined (не задано) - спеціальне значення, що повертається у випадках, коли запитувані дані не знайдені.
Область дії змінних
Хоча GML і можна розглядати як об'єктно-орієнтована мова, природа об'єктів і примірників об'єктів в Game Maker створює деякі важливі відмінності в способі розмежування змінних. Існує два типи локальності: локальність в об'єкті і локальність в скрипті (або іншому шматку коду, що міститься в окремому контейнері). Те, що змінна є локальною для екземпляра об'єкта, означає, що змінна прив'язана до конкретного екземпляру об'єкта і ззовні цього примірника може бути використана тільки з приставкою, яка визначає цей екземпляр; то, що змінна є локальною для скрипта, означає, що ця змінна може бути використана тільки в цьому скрипті (і знищується після закінчення скрипта). Далі термін «локальний» означатиме локальність в об'єкті. За замовчуванням, змінна локальна для об'єкта, але не локальна для скрипта, в якому вона використовується. Для того щоб зробити змінну доступною всім екземплярам об'єктів, вона може бути визначена через глобальний простір імен:
global.foo = "bar";
Також існує можливість оголошувати глобальні змінні використовуючи ключове слово globalvar:
globalvar foo, bar;
Але такого способу слід уникати, так як це може легко призвести до складно виявляються помилок, через перетину областей видимості змінних (те ж саме рекомендують і безпосередньо розробники GMS, більше того, можливо, що в майбутньому це ключове слово буде повністю прибрано з мови - в даний момент воно залишено виключно з міркувань забезпечення сумісності). Для того, щоб зробити змінну локальної для скрипта, її потрібно визначати так:
var foo, bar;
Областю видимості локальної змінної є скрипт, всередині якого вона оголошена. Це має на увазі, що при перемиканні контексту (c використанням with) вона як і раніше буде доступна. наприклад:
var foo = "bar";
with other
{
show_message (foo); // змінна foo доступна
}
Доступ до локальних змінних об'єкта можна отримати, використовуючи ідентифікатор екземпляра об'єкта як приставку
instance.varname
але, тим не менше, таким чином неможливо отримати локальні змінні одного скрипта з іншого, поки вони не передаються як параметри функції. Поточне простір імен об'єкта може бути змінено за допомогою конструкції «with». Наприклад, наступний скрипт, якщо його помістити в подію зіткнення, знищить інший екземпляр об'єкта, залучений в цю подію (зауважимо, що у події зіткнення Game Maker автоматично встановлює змінну other на другий примірник об'єкта, з яким сталося зіткнення):
with other
{
instance_destroy();
}
Розподіл пам'яті
GML автоматично розподіляє пам'ять під змінні на ходу, і використовує динамічні типи, тому присвоювання змінним значення різних типів також можливо. Наприклад, спочатку можна створити целочисленную змінну, а потім змінити її на строкову:
intNumber = 1;
intNumber = "Ця змінна тепер містить рядок";
У GML немає спеціального функціоналу, що дозволяє звільняти пам'ять, зайняту під змінну, однак при необхідності можна привласнювати змінної нове значення, меншого розміру. Наприклад, якщо у вас є змінна, в якій зберігається великий текст, то, присвоївши змінної значення порожнього рядка, можна домогтися вивільнення пам'яті. Те ж саме стосується і масивів:
data = [1, 2, 3, 4, 5]; // створили масив (такий синтаксис створення масивів доступний починаючи з GMS2)
data = 0; // знищили масив (тепер це просто змінна)
При знищенні об'єкта також знищуються всі змінні, локальні для нього, а будь-які глобальні змінні існують незалежно від них. Тому перевагу потрібно віддавати локальним змінним, а глобальні змінні використовувати тільки в разі реальної необхідності цього. Для зберігання великих обсягів інформації більш ефективно, в Game Maker є підтримка декількох структур даних - таких, як стек, чергу, список, карта, пріоритетна чергу і сітка. Ці структури створюються, модифікуються і знищуються за допомогою вбудованих функцій. Також є функції практично у всіх структурах для сортування даних в них. У деяких випадках більш зручним і ефективнішим буде використання буферів, що дозволяють зберігати довільні дані і є, по суті, просто виділеними шматками пам'яті.
Об'єкти і ресурси
В основі роботи Game Maker з ресурсами лежать унікальні ідентифікатори, які служать для визначення конкретного ресурсу або примірника об'єкта. Ці ідентифікатори можуть бути використані скриптами або функціями для вказівки необхідного ресурсу. Так як створення ресурсів безпосередньо в Game Maker має на увазі вказівку імені, то це ім'я служить константою, що містить ідентифікатор ресурсу. Ідентифікатор конкретного екземпляра зберігається в локальній змінній «id». При динамічному створенні ресурсів, завжди повертається ідентифікатор створеного ресурсу, який може бути використаний в подальшому.
Приклади скриптів
Ось простий приклад скрипта, який виводить легендарну фразу «Hello, World!»:
show_message ( "Hello, World!");
Ще один приклад, який відображає той же текст, але вже у вікні програми. Зауважте, що за умовчанням Game Maker безперервно перемальовує вікно, тому в звичайному випадку цей код потрібно помістити в подія малювання.
draw_text (10, 10, "Hello, World!");
Ось фрагмент коду з гри на GML:
// це коментар
/ * Так коментарі пишуться в С ++. * /
/ * Визначення тимчасових змінних.
Ці змінні будуть видалені після закінчення скрипта.
Зауважте, що змінні не вимагають ніякого визначення типу! * /
var xx, yy, nn;
// Умова. Воно може бути скорочено до «if (can_shoot)».
if (can_shoot = true) // "=" і "==" можуть бути використані
{// Початок блоку коду. Ви можете також писати «begin» як в Pascal.
/ * Встановлюємо змінну в брехню. Те ж саме можна написати і так: «can_shoot = 0;»
Так як Game Maker не розрізняє булевские і цілочисельні значення. * /
can_shoot = false;
/ * Тут встановлюємо нульовий таймер на п'ять кроків.
Мінлива таймера буде опускатися до 0, а коли досягне його,
Подія нульового лічильника буде викликано. * /
alarm [0] = 5;
/ * Тут локальна змінна xx визначена як целочисленная,
І використана функція lengthdir_x. * /
xx = x + lengthdir_x (14, direction);
yy = y + lengthdir_y (14, direction);
// Ця функція створює зразок об'єкта obj_bullet і повертає ідентифікатор нового об'єкта.
nn = instance_create (xx, yy, obj_bullet);
/ * Оператор with дозволяє вам звертатися до змінних об'єкта безпосередньо * /
with (nn)
{
speed = obj_tank.speed + 3;
direction = obj_tank.direction;
}
}
Стилі коду можна змішувати. Наприклад, попередній приклад може бути записаний так:
var xx, yy, nn;
if can_shoot = true then begin
can_shoot: = false
alarm [0]: = 5
xx: = x + lengthdir_x (14, direction)
yy: = y + lengthdir_y (14, direction)
nn: = instance_create (xx, yy, obj_bullet)
with nn begin
speed: = obj_tank.speed + 3
direction: = obj_tank.direction
end
end
Ось приклад звичайного управління з клавіатури. Функція motion_set приймає два параметри: напрямок (в градусах) і швидкість (пікселів за крок). Виклик цієї функції призведе до зміни вбудованих локальних змінних speed і direction, які використовує Game Maker для переміщення об'єктів (об'єкти також можна зрушувати безпосередньо, використовуючи локальні змінні x і y):
if (keyboard_check (vk_left)) motion_set (180,4);
if (keyboard_check (vk_up)) motion_set (90,4);
if (keyboard_check (vk_right)) motion_set (0,4);
if (keyboard_check (vk_down)) motion_set (270,4);
if (keyboard_check (vk_nokey)) motion_set (0,0);
А ось приклад більш складного скрипта для платформної гри. Використовуючи його, гравець може ходити по опуклій поверхні:
if! place_free (x-4, y)
{
if place_free (x-4, y-4)
{
x- = 4
y- = 4
}
else if place_free (x-3, y-5)
{
x- = 3
y- = 5
}
else if place_free (x-2, y-6)
{
x- = 2
y- = 6
}
}
else
x- = 4
Критика
Вільний синтаксис GML полегшує створення ігор в певній мірі, але може породити абсолютно нечитабельним код:
switch 0begin case 0: x = 0break}
if a = 0then begin b = 1} else if a == 0 {b: = 1end
Хоча це і не частина мови, ще одним поширеним приводом для критики старих версій Game Maker був сам процес створення EXE-файлів, які складаються з завантажувача і ресурсів GM-файлу. При запуску такої гри, код розбирається на абстрактне синтаксичне дерево (використовувалася інтерпретація коду), що полегшувало декомпіляцію і суттєво збільшувало час завантаження. Однак в більш сучасних версіях (GameMaker: Studio) механізми були змінені, тому немає ніяких проблем ні зі швидкістю запуску, ні з декомпіляцією (декомпілятори для GMS не існує).
Література
- Matthew DeLucas. GameMaker Game Programming with GML. — Packt, 2014. — 350 p. — ISBN 978-1-78355-944-2.
Див. також
- Game Maker
- Game Maker: Studio
- Мова програмування
- Офіційний сайт програми Game Maker [ 10 травня 2010 у Wayback Machine.] (англ.)
- Російське співтовариство програми Game Maker [ 22 березня 2022 у Wayback Machine.]
- Офіційний блог компанії YoYo Games [ 7 квітня 2011 у Wayback Machine.] (англ.)
- Колективний блог про Game Maker [ 23 вересня 2020 у Wayback Machine.] (англ.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Game Maker Language GML interpretovana mova programuvannya rozroblenij dlya vikoristannya razom z programoyu dlya rozrobki komp yuternih igor Game Maker Spochatku pidtrimka movi bula vprovadzhena v Game Maker Markom Overmars dlya dopovnennya sistemi knopkovih podij prote piznishe vsi knopkovi podiyi buli vklyucheni v GML dozvolyayuchi programistu uniknuti vikoristannya knopkovih funkcij GML silno pov yazanij z seredovishem Game Maker Game Maker organizovanij tak shob ne bulo neobhidnosti programuvannya vruchnu takih rechej yak upravlinnya podiyami dizajn rivniv i nastrojka ob yektiv Isnuye hibna dumka sho GML pidtrimuye vstavki fragmentiv kodu na inshih movah takih yak Pascal Assembler abo C Pomilka vinikla cherez chastkovu shozhist sintaksisu GML z Pascal i C Napriklad operator amp amp mozhe buti zaminenij na and BibliotekaV Game Maker sukupnist knopkovih podij utvoryuye biblioteku V interfejsi programi biblioteki vidobrazhayutsya yak zakladki v yakih znahodyatsya rizni ikonki podij Kozhne take podiya ce GML skript abo funkciya yaku koristuvach mozhe vikoristovuvati v gri V postavku Game Maker vhodyat kilka standartnih bibliotek yaki mistyat osnovni podiyi yaki vikoristovuyutsya v bilshosti igor Takozh isnuye mozhlivist stvoryuvati svoyi vlasni biblioteki vikoristovuyuchi Library Maker U GMS2 vbudovanij mehanizm konvertaciyi dij zadanih knopkami v kod GML i nazad sho dozvolyaye novachkam shvidshe perejti na GML i pokrashuye rozuminnya togo yak pracyuyut standartni diyi Sintaksis i semantika GMLGML strukturno shozhij na movu S svoyimi blokami kodu viklikami funkcij privlasnennyam zminnih sintaksisom operatoriv i tak dali GML rozriznyaye operatori i virazi Napriklad g lt 1 ne ye pravilnim operatorom i vikliche pomilku Takozh prisvoyuvannya zminnih ce zavzhdi operator i tomu ne mozhe buti vikoristanij v virazah Napriklad nastupnij ryadok zavzhdi generuvala b pomilku tomu sho vona b obchislyuvala vkladene viraz yak true abo false a potim porivnyuvala b bulevij rezultat z ryadkom Yes nepravilne porivnyannya b if b answer get string Yes b or b No Yes Varto pam yatati sho znak rivnosti ye operatorom prisvoyennya i bulevih operatorom porivnyannya v virazah todi yak v S u virazah pishut podvijnij znak Prote podvijnij znak odno bude pravilno interpretovanij v razi vikoristannya jogo v virazah Vikoristannya takogo znaka v yakosti operatora prisvoyennya vikliche pomilku vikonannya GML takozh pidtrimuye operatori inkrementa g pidtrimuyetsya yak Postfiksnij tak i prefiksnaya zapis i g 1 te zh same sho i g g 1 Takozh isnuyut operatori amp i Pochinayuchi z GMS2 vvedena pidtrimka ternarnogo operatora Operatori v GML mozhut buti rozdileni krapkoyu z komoyu odnak ce ne ye obov yazkovoyu umovoyu hocha i mozhe privesti do pomilki v deyakih specifichnih vipadkah FunkciyiGame Maker mistit veliku biblioteku vbudovanih funkcij dlya zabezpechennya osnovnoyi funkcionalnosti Programist mozhe stvoryuvati svoyi vlasni skripti yaki viklikayutsya tochno takim zhe sposobom yak i funkciyi Funkciyi malyuvannya v Game Maker vikoristovuyut Direct3D API Pri neobhidnosti Game Maker takozh dozvolyaye viklikati nativnij kod platformi za dopomogoyu rozshiren DLL na Windows Java na Android JS na HTML5 i t p VikoristannyaZazvichaj GML ne potribno poperedno ogoloshuvati zminnu yak ce robitsya v deyakih inshih movah Minliva stvoryuyetsya avtomatichno vidrazu pislya prisvoyennya yij zhodnogo znachennya foo bar V Game Maker ye bagato vbudovanih zminnih i konstant Kozhen ekzemplyar ob yekta mistit bagato lokalnih zminnih napriklad h i u Takozh isnuye kilka vbudovanih globalnih zminnih napriklad score Ci zminni isnuyut nezalezhno vid primirnikiv ob yektiv Ci zminni ne mistyat prefiksu global Na vidminu vid globalnih zminnih zaznachenih programistom Odnomirni i dvovimirni masivi takozh pidtrimuyutsya Strukturi danih U GML ye funkciyi dlya stvorennya i redaguvannya struktur danih shesti tipiv stek chergu spisok karta asociativnij masiv prioritetna chergu i sitka Do sitci spisku i karti takozh ye mozhlivist dostupu za dopomogoyu aksessor sho nadayut sintaksis podibnij masiviv var value list 0 vmesto ds list find value list 0 map name Username vmesto ds map add map name Username var value map name vmesto ds map find value map name Tipi U GML pidtrimuyutsya nastupni tipi danih string ryadok poslidovnist simvoliv ukladenih v odinarni abo podvijni lapki pochinayuchi z GMS2 slid vikoristovuvati podvijni lapki real chislo cile abo z plavayuchoyu komoyu Hocha vse znachennya stvoreni v GML zberigayutsya yak chisla z plavayuchoyu komoyu podvijnoyi tochnosti dlya roboti z rozshirennyami mozhna vikoristovuvati i inshi tipiarray masiv zminna yaka vikoristovuye indeksi dlya dostupu do elementiv Mozhut mistiti bud yaki dani chisla ryadki inshi masivi deskriptori inshih struktur danih i t p Yih takozh mozhna peredati yak parametr u funkciyu i voni mozhut buti povernuti funkciyeyu yak rezultat boolean mozhe prijmati znachennya true abo false Majte na uvazi sho v danij chas GML ne pidtrimuye spravzhni bulevi znachennya i naspravdi prijmaye yak false bud yaki chisla menshe 0 5 a vse sho dorivnyuye abo bilshe yak true pointer pokazhchik pokazhchik na oblast pam yati Vikoristovuyetsya v deyakih specifichnih funkciyah na kshtalt buffer get address i in enum pererahuvannya zadana koristuvachem kolekciya konstant sho zberigayutsya v zminnoyi undefined ne zadano specialne znachennya sho povertayetsya u vipadkah koli zapituvani dani ne znajdeni Oblast diyi zminnih Hocha GML i mozhna rozglyadati yak ob yektno oriyentovana mova priroda ob yektiv i primirnikiv ob yektiv v Game Maker stvoryuye deyaki vazhlivi vidminnosti v sposobi rozmezhuvannya zminnih Isnuye dva tipi lokalnosti lokalnist v ob yekti i lokalnist v skripti abo inshomu shmatku kodu sho mistitsya v okremomu kontejneri Te sho zminna ye lokalnoyu dlya ekzemplyara ob yekta oznachaye sho zminna priv yazana do konkretnogo ekzemplyaru ob yekta i zzovni cogo primirnika mozhe buti vikoristana tilki z pristavkoyu yaka viznachaye cej ekzemplyar to sho zminna ye lokalnoyu dlya skripta oznachaye sho cya zminna mozhe buti vikoristana tilki v comu skripti i znishuyetsya pislya zakinchennya skripta Dali termin lokalnij oznachatime lokalnist v ob yekti Za zamovchuvannyam zminna lokalna dlya ob yekta ale ne lokalna dlya skripta v yakomu vona vikoristovuyetsya Dlya togo shob zrobiti zminnu dostupnoyu vsim ekzemplyaram ob yektiv vona mozhe buti viznachena cherez globalnij prostir imen b global b foo bar Takozh isnuye mozhlivist ogoloshuvati globalni zminni vikoristovuyuchi klyuchove slovo globalvar b globalvar b foo bar Ale takogo sposobu slid unikati tak yak ce mozhe legko prizvesti do skladno viyavlyayutsya pomilok cherez peretinu oblastej vidimosti zminnih te zh same rekomenduyut i bezposeredno rozrobniki GMS bilshe togo mozhlivo sho v majbutnomu ce klyuchove slovo bude povnistyu pribrano z movi v danij moment vono zalisheno viklyuchno z mirkuvan zabezpechennya sumisnosti Dlya togo shob zrobiti zminnu lokalnoyi dlya skripta yiyi potribno viznachati tak b var b foo bar Oblastyu vidimosti lokalnoyi zminnoyi ye skript vseredini yakogo vona ogoloshena Ce maye na uvazi sho pri peremikanni kontekstu c vikoristannyam with vona yak i ranishe bude dostupna napriklad b var b foo bar with other show message foo zminna foo dostupna Dostup do lokalnih zminnih ob yekta mozhna otrimati vikoristovuyuchi identifikator ekzemplyara ob yekta yak pristavku instance varname ale tim ne menshe takim chinom nemozhlivo otrimati lokalni zminni odnogo skripta z inshogo poki voni ne peredayutsya yak parametri funkciyi Potochne prostir imen ob yekta mozhe buti zmineno za dopomogoyu konstrukciyi with Napriklad nastupnij skript yaksho jogo pomistiti v podiyu zitknennya znishit inshij ekzemplyar ob yekta zaluchenij v cyu podiyu zauvazhimo sho u podiyi zitknennya Game Maker avtomatichno vstanovlyuye zminnu other na drugij primirnik ob yekta z yakim stalosya zitknennya with other instance destroy Rozpodil pam yati GML avtomatichno rozpodilyaye pam yat pid zminni na hodu i vikoristovuye dinamichni tipi tomu prisvoyuvannya zminnim znachennya riznih tipiv takozh mozhlivo Napriklad spochatku mozhna stvoriti celochislennuyu zminnu a potim zminiti yiyi na strokovu intNumber 1 intNumber Cya zminna teper mistit ryadok U GML nemaye specialnogo funkcionalu sho dozvolyaye zvilnyati pam yat zajnyatu pid zminnu odnak pri neobhidnosti mozhna privlasnyuvati zminnoyi nove znachennya menshogo rozmiru Napriklad yaksho u vas ye zminna v yakij zberigayetsya velikij tekst to prisvoyivshi zminnoyi znachennya porozhnogo ryadka mozhna domogtisya vivilnennya pam yati Te zh same stosuyetsya i masiviv data 1 2 3 4 5 stvorili masiv takij sintaksis stvorennya masiviv dostupnij pochinayuchi z GMS2 data 0 znishili masiv teper ce prosto zminna Pri znishenni ob yekta takozh znishuyutsya vsi zminni lokalni dlya nogo a bud yaki globalni zminni isnuyut nezalezhno vid nih Tomu perevagu potribno viddavati lokalnim zminnim a globalni zminni vikoristovuvati tilki v razi realnoyi neobhidnosti cogo Dlya zberigannya velikih obsyagiv informaciyi bilsh efektivno v Game Maker ye pidtrimka dekilkoh struktur danih takih yak stek chergu spisok karta prioritetna chergu i sitka Ci strukturi stvoryuyutsya modifikuyutsya i znishuyutsya za dopomogoyu vbudovanih funkcij Takozh ye funkciyi praktichno u vsih strukturah dlya sortuvannya danih v nih U deyakih vipadkah bilsh zruchnim i efektivnishim bude vikoristannya buferiv sho dozvolyayut zberigati dovilni dani i ye po suti prosto vidilenimi shmatkami pam yati Ob yekti i resursi V osnovi roboti Game Maker z resursami lezhat unikalni identifikatori yaki sluzhat dlya viznachennya konkretnogo resursu abo primirnika ob yekta Ci identifikatori mozhut buti vikoristani skriptami abo funkciyami dlya vkazivki neobhidnogo resursu Tak yak stvorennya resursiv bezposeredno v Game Maker maye na uvazi vkazivku imeni to ce im ya sluzhit konstantoyu sho mistit identifikator resursu Identifikator konkretnogo ekzemplyara zberigayetsya v lokalnij zminnij id Pri dinamichnomu stvorenni resursiv zavzhdi povertayetsya identifikator stvorenogo resursu yakij mozhe buti vikoristanij v podalshomu Prikladi skriptivOs prostij priklad skripta yakij vivodit legendarnu frazu Hello World show message Hello World She odin priklad yakij vidobrazhaye toj zhe tekst ale vzhe u vikni programi Zauvazhte sho za umovchannyam Game Maker bezperervno peremalovuye vikno tomu v zvichajnomu vipadku cej kod potribno pomistiti v podiya malyuvannya draw text 10 10 Hello World Os fragment kodu z gri na GML ce komentar Tak komentari pishutsya v S Viznachennya timchasovih zminnih Ci zminni budut vidaleni pislya zakinchennya skripta Zauvazhte sho zminni ne vimagayut niyakogo viznachennya tipu var xx yy nn Umova Vono mozhe buti skorocheno do if can shoot if can shoot true i mozhut buti vikoristani Pochatok bloku kodu Vi mozhete takozh pisati begin yak v Pascal Vstanovlyuyemo zminnu v brehnyu Te zh same mozhna napisati i tak can shoot 0 Tak yak Game Maker ne rozriznyaye bulevskie i cilochiselni znachennya can shoot false Tut vstanovlyuyemo nulovij tajmer na p yat krokiv Minliva tajmera bude opuskatisya do 0 a koli dosyagne jogo Podiya nulovogo lichilnika bude viklikano alarm 0 5 Tut lokalna zminna xx viznachena yak celochislennaya I vikoristana funkciya lengthdir x xx x lengthdir x 14 direction yy y lengthdir y 14 direction Cya funkciya stvoryuye zrazok ob yekta obj bullet i povertaye identifikator novogo ob yekta nn instance create xx yy obj bullet Operator with dozvolyaye vam zvertatisya do zminnih ob yekta bezposeredno with nn speed obj tank speed 3 direction obj tank direction Stili kodu mozhna zmishuvati Napriklad poperednij priklad mozhe buti zapisanij tak var xx yy nn if can shoot true then begin can shoot false alarm 0 5 xx x lengthdir x 14 direction yy y lengthdir y 14 direction nn instance create xx yy obj bullet with nn begin speed obj tank speed 3 direction obj tank direction end end Os priklad zvichajnogo upravlinnya z klaviaturi Funkciya motion set prijmaye dva parametri napryamok v gradusah i shvidkist pikseliv za krok Viklik ciyeyi funkciyi prizvede do zmini vbudovanih lokalnih zminnih speed i direction yaki vikoristovuye Game Maker dlya peremishennya ob yektiv ob yekti takozh mozhna zrushuvati bezposeredno vikoristovuyuchi lokalni zminni x i y if keyboard check vk left motion set 180 4 if keyboard check vk up motion set 90 4 if keyboard check vk right motion set 0 4 if keyboard check vk down motion set 270 4 if keyboard check vk nokey motion set 0 0 A os priklad bilsh skladnogo skripta dlya platformnoyi gri Vikoristovuyuchi jogo gravec mozhe hoditi po opuklij poverhni if place free x 4 y if place free x 4 y 4 x 4 y 4 else if place free x 3 y 5 x 3 y 5 else if place free x 2 y 6 x 2 y 6 else x 4KritikaVilnij sintaksis GML polegshuye stvorennya igor v pevnij miri ale mozhe poroditi absolyutno nechitabelnim kod switch 0begin case 0 x 0break if a 0then begin b 1 else if a 0 b 1end Hocha ce i ne chastina movi she odnim poshirenim privodom dlya kritiki starih versij Game Maker buv sam proces stvorennya EXE fajliv yaki skladayutsya z zavantazhuvacha i resursiv GM fajlu Pri zapusku takoyi gri kod rozbirayetsya na abstraktne sintaksichne derevo vikoristovuvalasya interpretaciya kodu sho polegshuvalo dekompilyaciyu i suttyevo zbilshuvalo chas zavantazhennya Odnak v bilsh suchasnih versiyah GameMaker Studio mehanizmi buli zmineni tomu nemaye niyakih problem ni zi shvidkistyu zapusku ni z dekompilyaciyeyu dekompilyatori dlya GMS ne isnuye LiteraturaMatthew DeLucas GameMaker Game Programming with GML Packt 2014 350 p ISBN 978 1 78355 944 2 Div takozhGame Maker Game Maker Studio Mova programuvannyaOficijnij sajt programi Game Maker 10 travnya 2010 u Wayback Machine angl Rosijske spivtovaristvo programi Game Maker 22 bereznya 2022 u Wayback Machine Oficijnij blog kompaniyi YoYo Games 7 kvitnya 2011 u Wayback Machine angl Kolektivnij blog pro Game Maker 23 veresnya 2020 u Wayback Machine angl