![]() |
|
![]() |
![]() |
Новости | Конференция | Чат | База данных | Творчество | Сообщество | О сайте | English |
![]() |
Помощь сайту |
![]() |
![]() |
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GML: УРОК 1: ОБЩИЙ ИНТЕРФЕЙС, ОСНОВЫ И СОЗДАНИЕ ДВИЖЕНИЯ Скачали GM, запустили и видим обычное диалоговое окно, которое спрашивает у нас «включать ли «Усовершенствованный режим»?». Включаем. Без него, максимум, что Вы сделаете, это Pac-Man. Поэтому, «ДА», включаем. Следующее окно навязчиво просит нас зарегистрировать эту копию программы. Естественно, лучше сделать хороший поступок и зарегистрировать... Но мы же знаем слово «крэк». Где его искать, не скажу, ибо не знаю. Сами найдёте (для особо ленивых или неудачных – шлите мне Личное Сообщение, я дам Вам свой код). Но зарегить надо! Без этого Вы не сможете сделать всего, что я расскажу. ![]() рис. 1 Идём дальше. Перед нами главное окно программы (рис. 1). За несколько дней, оно станет для вас родным. Слева – список ресурсов, используемых вашей игрой: Sprites, Sounds, Backgrounds, Paths, Scripts, Fonts, Time Lines, Objects, Rooms, Game Information и Global Game Settings. Все являются папками, кроме последних двух, которые вызывают окошка «Инфы об игре» и «Глобальных настроек» соответственно. Посередине (или справа внизу) – рабочий стол или рабочая область. Место для Ваших экспериментов. Ну а сверху – меню. Что тут еще можно сказать. ![]() рис. 2 Итак, нам нужно добавить в игру основной спрайт – наш корабль. Вот он, наш красавец :) (рис. 2) (с) Morphosis. Щёлкаем по нему (в браузере!) правой кнопкой мыши (далее – ПКМ) и выбираем «сохранить как». Сохраняем куда-то. Куда – запоминаем. ![]() рис. 3 В GM`е щелкаем левой клавишей мыши (далее – ЛКМ) на значке с красным Pac-Man`ом (американский колобок :)). Этим самым мы создаем новый спрайт и автоматически вызываем его настройки (рис. 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 видов ресурсов. :) Ладно, загружайте в 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 (зачем мелочиться :)) и жмём ОК. После всего, наше окно будет выглядеть так – (рис. 4) ![]() рис. 4 Наконец-то, первый спрайт создан. Теперь создадим «объект» с этим спрайтом. Щёлкаем по кнопке в меню с изображением синего круга и приступим к программированию. Перед нами открывается окно с меньшим кол-вом данных, чем в спрайте (рис. 5). ![]() рис. 5 Разбираем: Name: Название объекта Sprite: Выбор спрайта для объекта. New: Создает новый спрайт и автоматом ассоциирует его с объектом Edit: Редактирует выбранный спрайт (если есть) Visible: Будет ли объект видимый в игре Solid: Будет ли объект твёрдым (позже объясню) Depth: Дальность объекта (Примечание: чем ниже число, тем ближе объект) Persistent: Сохраняет позицию и данные об объекте при переходе не другую локацию Parent: «Родительский объект». Объясню позже Mask: Маска для объекта. Только при использовании ppc. Если точки столкновения и сам спрайт не одинаковы Show Information: Показывает информацию об объекте в текстовом виде OK: :) Едем дальше: Большое белое окно в центре это список событий. События бывают разные: При создании объекта, при уничтожении, при нажатии клавиши мыши, при вводе текста... В общем, много их очень. О них поговорим уже через несколько строк. Под полоской находятся клавиши «Add Event», «Delete Event» и «Change Event». Они значат «Добавить Событие», «Удалить Событие» и «Изменить Событие» соответственно. Еще большее окно справа – окно действий. При любом событии могут выполняться действия. Они размещены в «Палитре Действий», справа от пред. окна. Их есть еще больше чем событий и расписывать их все я не буду. Тем более, что пользоваться мы в основном будем «кодами» (но не «чит» :)) Похоже всё. Ну так создадим объект! ![]() рис. 6 Меняем название на более подходящее чем «object0». На «pl» (что есть сокращение от Player. Сокращаем потому, что будем часто использовать этот объект. Быстрее ведь написать pl чем obj_player01) например. Ставим на «Sprite» наш спрайт. Больше ничего не трогаем, а ЛКМ на «Добавить Событие». В новом окне (рис. 6) выбираем «create» («создать»). Теперь действия, которые вы будете добавлять в правое окно, будут работать, когда объект будет создаваться. Нам нужно только их добавить. На палитре выбираем вкладку «control». На этой вкладке размещены действия по работе с «кодом», переменными, событиями и другими неотъемлемыми частями программирования. Щёлкая ПКМ по любому действию, мы добавляем его в самый низ списка действий. Если использовать ЛКМ, то вы сможете сами перетянуть действие в нужное вам место. Делайте, как вам удобно, но добавьте действие «execute a piece of code» (выглядит как листок, на фоне серой кнопки). Добавили? Отлично. ![]() рис. 7 Видим это (рис. 7). Знакомое окно? Это обычный, но подогнанный под программинг блокнот (или WordPad (но уж никак не Microsoft Office Word (тем более 2007 :))). Пишем в него следующее: -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о остаются на своих местах. (рис. 8) ![]() рис. 8 Еще может быть непонятно, почему «+= 5», а не «= +5». При использовании знака «=», значение установится. А если «+=», «-=», «*=» или «/=», то значение добавиться, вычтется, помножиться или поделиться на уже существующее. Теперь делаем то же самое, но с клавишей «<RIGHT>» и с кодом: -CODE- direction -= 5 -CODE- Думаю, это понятно. ![]() рис. 9 Теперь добавим локацию и посмотрим, как будет это всё действовать. Щёлкаем в меню по кнопке «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» («если»). С его помощью, ограничиваем скорость. Нам же не надо, чтоб корабль летал со скоростю света :). То есть, при нажатии клавиши «<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-
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
Дизайн Elite Games V5 beta.18 EGM Elite Games Manager v5.17 02.05.2010 |
![]() |