ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

GML: УРОК 1: ОБЩИЙ ИНТЕРФЕЙС, ОСНОВЫ И СОЗДАНИЕ ДВИЖЕНИЯ

Перейти вниз

GML: УРОК 1: ОБЩИЙ ИНТЕРФЕЙС, ОСНОВЫ И СОЗДАНИЕ ДВИЖЕНИЯ

Сообщение автор Admin в Пт Мар 19, 2010 10:02 pm

Скачали GM, запустили и видим обычное диалоговое окно, которое спрашивает у нас «включать ли «Усовершенствованный режим»?». Включаем. Без него, максимум, что Вы сделаете, это Pac-Man. Поэтому, «ДА», включаем.

Следующее окно навязчиво просит нас зарегистрировать эту копию программы. Естественно, лучше сделать хороший поступок и зарегистрировать... Но мы же знаем слово «крэк». Где его искать, не скажу, ибо не знаю. Сами найдёте (для особо ленивых или неудачных – шлите мне Личное Сообщение, я дам Вам свой код). Но зарегить надо! Без этого Вы не сможете сделать всего, что я расскажу.

Идём дальше. Перед нами главное окно программы (рис. 1). За несколько дней, оно станет для вас родным.

Слева – список ресурсов, используемых вашей игрой: Sprites, Sounds, Backgrounds, Paths, Scripts, Fonts, Time Lines, Objects, Rooms, Game Information и Global Game Settings. Все являются папками, кроме последних двух, которые вызывают окошка «Инфы об игре» и «Глобальных настроек» соответственно.

Посередине (или справа внизу) – рабочий стол или рабочая область. Место для Ваших экспериментов.

Ну а сверху – меню. Что тут еще можно сказать.

Итак, нам нужно добавить в игру основной спрайт – наш корабль. Вот он, наш красавец Smile (рис. 2) (с) Morphosis. Щёлкаем по нему (в браузере!) правой кнопкой мыши (далее – ПКМ) и выбираем «сохранить как». Сохраняем куда-то. Куда – запоминаем.

В GM`е щелкаем левой клавишей мыши (далее – ЛКМ) на значке с красным Pac-Man`ом (американский колобок Smile). Этим самым мы создаем новый спрайт и автоматически вызываем его настройки (рис. 3). Это окно может показаться непонятным даже для тех, кто знает английский. Пока разберём только то, что нужно в данном уроке.
Name: Собственно – название спрайта
Load Sprite: Загрузить спрайт из файла. Поддерживаются такие форматы: png, psp, cut, gif, pcd, pic, cel, pbm, pgm, ppm, pdd, psd, bw, rgb, rgba, sgi, rla, rpf, scr, pcc, pcx, eps, fax, tif, tiff, icb, tga, vda, vst, win, dib, rle, jpeg, jpe, jpg, jfif, emf, wmf, ico, bmp. Не так уж и много, правда?
Width: Ширина спрайта (ось X)
Height: Высота спрайта (ось Y)
Number of subimages: Кол-во кадров, если спрайт анимирован
Show: (показывается когда спрайт анимирован) Номер кадра, видимого в пред. просмотре
Edit Sprite: Кнопка, которая переносит вас в интегрированный «Paint»
Transparent: Если вкл. – цвет пикселя в левом нижнем углу будет считаться фоном и будет вырезан во всём спрайте
OK: Что тут говорить. ОК, он и в Африке ОК

Переходим ко второму столбцу:

Precise collision checking: Если вкл. – столкновения будут просчитываться на пиксельном уровне (я практически не пользуюсь, да и тормозит нехило)
Smooth edges: Не дай вам бог включить эту функцию! Она сглаживает края изображения. По сути, это аналог Antialiasing`а, но сделано это просто ужасно! Позже, я расскажу о методах сглаживания краёв спрайта, которые сделать тяжелее, но выглядеть будет гораздо лучше
Preload texture: Погрузка спрайта во время загрузки игры. Удлиняет последнее. Если выкл. – спрайту загрузиться только тогда, когда потребуется. Я держу выкл.
Origin: Центр спрайта. По 3DSMax`овски – pivot point. Относительно него могут быть проведены перемещение или вращение
X: X координата origin`а
Y: Y координата origin`а
Center: Автоматически размещает Origin в центр спрайта
Bounding Box: Границы столкновений. Используются тогда, когда precise collision checking выключен
Automatic: При выборе, границы размещаются по спрайту так, чтобы в них (границы) попадали только НЕ фоновые части (цвет пикселя в левом нижнем углу считается фоном)
Full image: При выборе, границы охватывают весь спрайт
Manual: Самостоятельный выбор границ
Left: Левый край границ
Right: Правый край границ
Top: Верхний край границ
Bottom: Нижний край границ

Следующее окно является пред. просмотром одного кадра из нашего спрайта (какого – выбирается в Show)

Фуф. Разобрали всё, а не только то, что нужно. Ну и ладно. Работы дальше будет поменьше.

А теперь посмотрите на Список Ресурсов. Мы полностью разобрали Sprites. Осталось, всего-навсего 8 видов ресурсов. Smile

Ладно, загружайте в GM наш корабль. Загрузили? Видите слева пиктограмму нашего спрайта (уменьшенную, кстати, до размера 16х16 пкс.), а возле нее «sprite1»? Отлично. Поменяем название с «sprite1» на, например, «spr_ship01». Потом отключаем precise collision checking (далее – pcc), smooth edges (далее – se) и preload texture (далее – pt). ЛКМ по center (x и y автоматически выставляться на 62 и 71). В разделе bounding box врубаем full image (зачем мелочиться Smile) и жмём ОК. После всего, наше окно будет выглядеть так – (рис. 4)

Наконец-то, первый спрайт создан. Теперь создадим «объект» с этим спрайтом. Щёлкаем по кнопке в меню с изображением синего круга и приступим к программированию.

Перед нами открывается окно с меньшим кол-вом данных, чем в спрайте (рис. 5).

Разбираем:

Name: Название объекта
Sprite: Выбор спрайта для объекта.
New: Создает новый спрайт и автоматом ассоциирует его с объектом
Edit: Редактирует выбранный спрайт (если есть)
Visible: Будет ли объект видимый в игре
Solid: Будет ли объект твёрдым (позже объясню)
Depth: Дальность объекта (Примечание: чем ниже число, тем ближе объект)
Persistent: Сохраняет позицию и данные об объекте при переходе не другую локацию
Parent: «Родительский объект». Объясню позже
Mask: Маска для объекта. Только при использовании ppc. Если точки столкновения и сам спрайт не одинаковы
Show Information: Показывает информацию об объекте в текстовом виде
OK: Smile

Едем дальше: Большое белое окно в центре это список событий. События бывают разные: При создании объекта, при уничтожении, при нажатии клавиши мыши, при вводе текста... В общем, много их очень. О них поговорим уже через несколько строк. Под полоской находятся клавиши «Add Event», «Delete Event» и «Change Event». Они значат «Добавить Событие», «Удалить Событие» и «Изменить Событие» соответственно.

Еще большее окно справа – окно действий. При любом событии могут выполняться действия. Они размещены в «Палитре Действий», справа от пред. окна. Их есть еще больше чем событий и расписывать их все я не буду. Тем более, что пользоваться мы в основном будем «кодами» (но не «чит» Smile)

Похоже всё. Ну так создадим объект!

Меняем название на более подходящее чем «object0». На «pl» (что есть сокращение от Player. Сокращаем потому, что будем часто использовать этот объект. Быстрее ведь написать pl чем obj_player01) например. Ставим на «Sprite» наш спрайт. Больше ничего не трогаем, а ЛКМ на «Добавить Событие». В новом окне (рис. 6) выбираем «create» («создать»). Теперь действия, которые вы будете добавлять в правое окно, будут работать, когда объект будет создаваться. Нам нужно только их добавить. На палитре выбираем вкладку «control». На этой вкладке размещены действия по работе с «кодом», переменными, событиями и другими неотъемлемыми частями программирования. Щёлкая ПКМ по любому действию, мы добавляем его в самый низ списка действий. Если использовать ЛКМ, то вы сможете сами перетянуть действие в нужное вам место. Делайте, как вам удобно, но добавьте действие «execute a piece of code» (выглядит как листок, на фоне серой кнопки). Добавили? Отлично.
http://www.elite-games.ru/images/art/program/pic7gif.gif
Видим это (рис. 7). Знакомое окно? Это обычный, но подогнанный под программинг блокнот (или WordPad (но уж никак не Microsoft Office Word (тем более 2007 Smile)). Пишем в него следующее:
-CODE-
life = 100 //Всё, что находится за 2-ма слэшами — комментарий


life_max = 100
shield = 100
shield_max = 100



/* Комментарии можно вставлять между слэшем и звёздочкой.
Так они могут быть многострочными*/

-CODE-

Слова «-CODE-» писать не надо. Они будут использованы для того, чтобы вы отличали обычный текст от кода. Всё, что между ними – код, остальное текст этого урока.

Итак, надеюсь, с комментариями всё ясно? Комменты в GM`е выделяются зелёным курсивом.

Что мы сделали в первых двух строках? Мы инициализировали (или создали) 4 переменные: life, life_max, shield и shield_max. Если перед названиями переменных не стоит слово «global.», они будут созданы только для текущего объекта. В ином случае – они будут глобальными, т.е. их могут использовать все объекты. Вот пример глобального использования переменных: дописываем в этот код:

-CODE-
global.gameover = 0
-CODE-

Вот эту переменную («gameover») может использовать любой объект.

В этом уроке, эти переменные мы использовать не будем.

А теперь сделаем движение и вращение нашего корабля.

Добавляем событие «keyboard press» «<LEFT>». Обратите внимание, что клавиатур есть 3 штуки: с зелёной стрелкой вверх, с красной вниз, и простая. Объясняю: действия в событие с зелёной стрелкой вверх будут выполнятся 1 раз при отпускании клавиши. Действия в событие с красной стрелкой вниз будут выполнятся 1 раз при нажатии клавиши. Ну а действия в событии без стрелки будут выполнятся постоянно, пока вы не отпустите клавишу. Вот это событие нам и нужно. Добавляем его и создаем в нём этот код:

-CODE-
direction += 5
-CODE-

Объясняю, что мы сделали: при нажатии кл. влево, к направлению движения корабля добавиться 5о (градусов). Почему добавиться, а не отнимется? Сам не знаю почему, но в GM`е, градусные меры перевёрнуты. Там, где у нас 180о, в проге 0о. Соответственно, где 00, там 180о. 90о и 270о остаются на своих местах. (рис. Cool


Еще может быть непонятно, почему «+= 5», а не «= +5». При использовании знака «=», значение установится. А если «+=», «-=», «*=» или «/=», то значение добавиться, вычтется, помножиться или поделиться на уже существующее.

Теперь делаем то же самое, но с клавишей «<RIGHT>» и с кодом:

-CODE-
direction -= 5
-CODE-

Думаю, это понятно.


Теперь добавим локацию и посмотрим, как будет это всё действовать. Щёлкаем в меню по кнопке «room» (пиктограмма с пустым белым окошком). Открывается окно локаций или комнат (рис. 9). В правой панели ЛКМ по пустому пространству и выбираем наш объект. Щёлкаем в любом месте а комнате, чтобы создать его «инстанц» («instance»). Чтобы удалить инстанц – ПКМ по нём в комнате.

Инстанц – это копия объекта, его отображение. В инстанце можно сделать персональные минимальные изменения, не изменяя объект. Но это нам пока ни к чему. Мы будем использовать это при создании звёздных систем.

Теперь нажимаем в меню на кнопку с изображением зелёной стрелки или нажимаем <F5>. Игра загружается.

Теперь понажимаем на <LEFT>, <RIGHT>. Ничего не происходит! Почему? Нажимая на клавиши мы меняем направление его движения, но не его вращение. Исправляем.

Дважды ЛКМ по нашему объекту в Списке Ресурсов, чтобы вызвать его настройки. Добавляем событие «Step» «Step». Пишем туда такой код:

-CODE-
image_angle = direction-90 //ТОЛЬКО В ЗАРЕГИСТРИРОВАНОЙ ВЕРСИИ


-CODE-

image_angle — это вращение. Запускаем. Всё ОК? Надеюсь...

А сейчас возьмёмся за движение!

Создаем событие «<UP>». В нём пишем (добавляем код и пишем):

-CODE-
if (speed < 5)
{
speed += 0.1
}
-CODE-

Здесь, как видите, появились «if» («если»). С его помощью, ограничиваем скорость. Нам же не надо, чтоб корабль летал со скоростю света Smile. То есть, при нажатии клавиши «<UP>», скорость будет увеличиваться на 0.1 за кадр, при условии, что она меньше 5. Скорость измеряется в пикселях за кадр.

Теперь – замедление: Создаем событие «<DOWN>» и прописываем:

-CODE-
if (speed > 0)
{
speed -= 0.1
}
-CODE-

Это, думаю, понятно.

Если вам не нравиться, как выглядит вращение (пиксели становятся очень видными и по спрайту как будто текут волны), то дважды ЛКМ по global game settings в Списке Ресурсов и включаем Interpolate colors between pixels. Помогает.

На этом первый урок по терзанию Game Maker`а можно считать законченным.



ДОПОЛНЕНИЕ К УРОКУ 1


Есть небольшое дополнение. В результате небольшого эксперимента не досуге был придуман следующий вариант. Попробуйте сделать так:
Внимание: Переписываем по новому! Старые коды удалить!

В <CREATE>

-CODE-
life = 100
life_max = 100
shield = 100
shield_max = 100
dir = 0
global.gameover = 0
-CODE-

В <STEP>

-CODE-
image_angle = dir-90
-CODE-

В <LEFT>

-CODE-
dir += 5
-CODE-

В <RIGHT>

-CODE-
dir -= 5
-CODE-

В <UP>

-CODE-
motion_add(dir,0.5)
-CODE-

В <DOWN>

-CODE-
motion_add(dir,-0.5)
-CODE-
ZEUStiger
avatar
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

Посмотреть профиль http://game-dll.mirbb.net

Вернуться к началу Перейти вниз

Re: GML: УРОК 1: ОБЩИЙ ИНТЕРФЕЙС, ОСНОВЫ И СОЗДАНИЕ ДВИЖЕНИЯ

Сообщение автор Батист в Вт Янв 29, 2013 6:12 am

На самом деле GM Лучший конструктор для общего понимания анатомии игр. Исходя из того что ученик игродел должен быть готов к отсутствию свободного времени, к знанию иностранного языка, быть стресс-о устойчивым, терпеливым, усидчивым, внимательным к новостям и обладать еще целым вагоном и тележкой всяких иных качеств... GM позволяет быстро окунутся в атмосферу творца единого. И получить тот кайф от своих первых корявых (Так у всех) проектов.

GM - отлично прижился на машинках Российского пользователя, но не стоит забывать что его папашка - дядя сем. И в конечном итоге может быть так что нужной инфы по нему в рунете не будет! Все зависит от уровня знакомства с GM, да и не только. Так что если настрой боевой и вы готовы штамповать игры хоть для калькуляторов, а с английским туго... учите английский между делом. Для игродела это важно.

У GM так же очень хорошие графические редакторы. На первых парах я мог часами сидеть вырисовывая всякие вензеля.

Что касаемо версий GM начиная с пятой интерфейс особо не менялся, и важным в GM является только режим. Pro - продвинутый и light - легкий. Режимы Pro только при наличии ключа (таблетки)

Советую всем начинающем, да и умеющим Basketball
avatar
Батист

Сообщения : 3
Очки : 3
Репутация : 0
Дата регистрации : 2013-01-29
Возраст : 33
Откуда : Владивосток

Посмотреть профиль

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения