1. Теория Давайте узнаем, что такое переменная. Переменные очень важны для любого языка программирования, будь то хоть GML, хоть C++, хоть Бейсик. По урокам математики вы знаете что переменная - число с непостоянным значением. Переменные существуют трёх видов (по крайней мере, я их так классифицирую): 1. Числовая. Числовые переменные можно представить как кошель. В него можно положить сколько угодно монет. К примеру, переменная
Code
money=100
показывает что у героя в кармане 100 монет. Переменные можно складывать, вычитать, умножать и делить. Вот таблица действий с переменными:
Code
money=100 // переменная money равна 100-ам money-=100 // из переменной money вычесть 100 money+=100 // к переменной money прибавить 100 money*=100 // переменную money умножить на 100 money/=100 // переменную money разделить на 100 money!=100 // переменная money НЕ равна 100-ам money>=100 // переменная money больше 100 money<=100 // переменная money меньше 100
Итак, теперь мы знаем, что представляет из себя числительные переменные. Теперь второй тип переменных: 2. Булева У булевых переменных всего два значения - true и false. Эту переменную можно представить как выключатель, у которого два положения - включить(true) и выключить (false). Обычно этот вид переменных используют для обозначения того выполнил ли герой квест, есть ли у него такое-то оружие, и тому подобное. Вот запись, означающая, что у героя есть лазер:
Code
lazer = true
И последний тип переменных : 3. Символьные. Символьные переменные содержат в себе какой либо текст. Их можно представить как запечатанное письмо. Текст, содержащийся в переменной должен быть в кавычках:
Code
kvest="Доставить письмо королю"
Эта переменная отмечает, что переменная kvest находится в стадии "Доставить письмо королю". Также любую переменную можно сделать глобальной - то есть она будет действовать на все объекты и все комнаты. Для этого перед переменной надо поставить приставку global. и всё! И ещё - каждую переменную нужно объявлять - прописать её значение в событии create (создания). Вот мы и разобрались, что представляют переменные. Эта тема очень важна во многих языках программирования. Операторы. Самый важный в GML'е оператор if (если). То есть если выражение истинно то выполняется функция. Схема оператора if:
Code
if выражение { функция }
Это самый простой вариант использования этого оператора. В него можно так же внести функцию обработки если выражение ложно. Для этого используют частицу else (иначе). Вот пример:
Code
if money>0 { show_message("У тебя есть деньги.") } else { show_message("У тебя нет ни гроша!") }
Происходит проверка есть ли у героя деньги и вывод сообщений по результату. Команды Команды "говорят" компьютеру, что должен делать герой, монстр, пуля и т.д. В языке GML очень много команд так что я перечислю только необходимые для нашей первой игры:
Code
move_towards_point(x,y,скорость) // двигаться к точке x, y с определённой скоростью. instance_create(x,y,obj) instance_destroy()
Думаю этого небольшого набора нам должно хватить. Создание игры "Мясо" Наконец мы можем при помощи полученных знаний создать игру! По названию игры видно что это будет мясная TDS (игра стрелялка с видом сверху). Откроем Game Maker и заготовим спрайты (2D картинки): 1. Герой 2. Монстр 3. Стена 4. Труп монстра. 5. Пуля Все спрайты должны быть повёрнуты вправо!!! Создадим объект o_hero и назначим ему спрайт героя. Создадим событие создания и во вкладке control перетащим иконку с листочком на рабочую область (иконка ). Открылось окно ввода кода. Нам надо объявить в этом окне жизненно важные переменные:
Code
health=100 // 100 здоровья.
Теперь у героя есть 100 здоровья и 30 патронов. Далее научим героя ходить. В событии шага пишем код (опять перетаскиваем листочек):
Code
if keyboard_check(ord("W"))// если нажата клавиша W... {y-=4} // ...переместится вверх на 4 пк. if keyboard_check(ord("S")) {y+=4} if keyboard_check(ord("A")) {x-=4} if keyboard_check(ord("D")) {x+=4} image_angle=point_direction(o_hero.x,o_hero.y,mouse_x,mouse_y)// поворачиватся в сторону мышки.
А что такое image_angle=point_direction? Это означает что системная переменная image_angle (угол поворота) равна системной переменной point_direction (определённая директория). Немного отвлечёмся и создадим объекты o_monster, o_stena и o_pula. Откроем опять объект героя и в событии столкновения с объектом o_stena напишем простой код:
Code
speed=0
А в столкновении с монстром:
Code
health-=4 // здоровье -4 speed=0 // чтобы герой не проходил сквозь монстра.
И последнее, в событии "нет больше здоровья" поставим кнопочку "рестарт комнаты". Уффф... Прописали героя. Теперь пуля. Что должна делать пуля? Лететь к мышке! Ну и сделаем этот "полёт". Откроем ивент создания пули и перетащив листочек пропишем код обеспечивающий полёт пули:
Code
move_towards_point(mouse_x,mouse_y,10)// движение к мышке.
На этом коде видно что вместо числового значения мы поставили переменную, отмечающую текущие координаты мыши. А в событии столкновения со стеной попробуйте сами сделать уничтожение пули. Так с пулей закончили! Теперь монстр и его AI. В создании пропишем переменную здоровья:
Code
hp=50
А в событии шага его AI:
Code
if distance_to_object(o_hero)<=200 { mp_potential_step(o_hero.x,o_hero.y,6,1)// движение к герою } image_angle=direction //поворот в сторону движения if hp<=0 { instance_destroy() instance_create(x,y,o_over) }
P.S. o_over это труп монстра. Сделать его смертным можно добавив столкновение с пулей:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Курс GML. Часть 1 - введение.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Да ты крут чувак(= Эх видел бы я ентот урок пол-года назад. В обшем молодец + заслужил. Но лучше всё таки не для новичков, а для более опытных А тут я согласен!