Приветствую Вас, Гость | RSS
Пятница, 19.04.2024, 07:05
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: artem, HI232  
Форум » Игростроение » Вопросы и ответы » Учебник по game maker (По устаревшей версии gm)
Учебник по game maker
RagnaRockДата: Воскресенье, 26.09.2010, 13:53 | Сообщение # 1
Апокалипсис
Группа: Постоялец академии
Сообщений: 602
Награды: 13
Репутация: 56
Замечания: 0%
Статус: Offline
Источник
Часть первая. Первые шаги.

Итак, приступим, пожалуй.

Для начала хочу сказать, что без какого-либо опыта в GM "самую крутую игру на свете" вам не сделать.
Перед тем, как углублятся в особенности Game Maker начнем с обьяснения что в Game Maker (далее - GM) и к чему.

При первом запуске Game Maker он вас любезно спросит: "Activate advanced mode?" - "включить "сложный" режим?" - нажимайте "No" ("Нет"). Потом можно будет переключится в этот режим, а пока он нам не нужен.

Все игры, созданные на GM, так скажем, располагаются в комнатах (Rooms). В GM Комнаты плоские, то есть в них только 2 измерения (2D). В этих комнатах размещаются обьекты.
Примеры обьектов: стены, главный герой, мячик.
Эти обьекты могут выполнять действия, реагировать на нажатия клавиш или кнопок мыши и т.п. (Хотя и некоторые обьекты, например стены, в основном ни на что не реагируют и не перемещаются)

Обьект может выполнять действие если произошло какое-либо событие. Именно поэтому GML (Язык программирования Game Maker, Game Maker Language) является обьектно-базированным языком. Например, если мячик коснулся пола, он должен отскочить, если нажата клавиша "влево" - герой должен пойти влево и так далее. Так как обьекты - наиболее важные составляющие игры, поговорим именно о них для начала.

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

Как я уже сказал, объекты могут выполнять действия, когда событие произошло. Есть большое разнообразие событий и огромный ассортимент различных действий. Например, есть событие создания, действия в нем исполняются, когда объект становится создан. (Если быть более точным, когда один экземпляр объекта создается; Об этом далее) Например, когда мяч создан, вы можете придать ему некоторые направление и скорость движения. Когда два объекта сталкиваются, вы получите событие столкновения. В таком случае вы можете заставить мяч остановиться или двигаться в обратном направлении. Вы также можете воспроизвести звуковой эффект. Для этого Game Maker позволяет проигрывать звуки.
Для нажатия клавиши на клавиатуре тоже есть определенное событие, и объект может принять соответствующие меры, например, начать двигаться в указанном направлении.

Я надеюсь, что вы пока все поняли. Вам придется поработать с объектами, чтобы они работали как следует и как требуется.

Теперь, после того, как мы разобрались с объектами, пора уже разобраться с комнатами (Англ. Room).
Во-первых, их может быть несколько, поэтому комнаты могут быть использованы, например, для создания уровней. GM позволяет размещать в каждой комнате объекты по-разному, а также переключаться между комнатами.

Комнаты могут иметь определенный фон. Фон может быть простым изображением, которое, как и спрайт, может быть отредактировано в GM, или загружено из файла, но не может иметь анимации. Далее, вы можете разместить в комнате несколько экземпляров обьектов.

Чтобы понять это, приведу аналогию с собаками. Собака - объект, она реагирует на ваши действия (Смерть и ампутации не рассматриваем ;)). О ней мы ничего определенного сказать не можем - она одинаково для всех собак злится при избиении, радуется при ласкании, но мы не можем сказать ничего о цвете ее шерсти или характере, собака - это обобщенное понятие. А вот определенная собака, Шарик или Бобик - экземпляр собаки, он имеет собственный характер, цвет шерсти и т.п. ТО есть вы можете создать обьект "dog" ("Собака") и создать их несколько штук в разных местах в комнате.

Теперь, когда у Вас есть все ресурсы - спрайты (Sprites), обьекты (Objects), комнаты (Rooms), звуки (Sounds), и фоны (Backgrgounds) - все готово для запуска игры. (Ээ, это только если!) Если обьекты реагируют на действия и в игре не обнаружено накаких ошибок, то игру можно переводить в формат .exe - стандарт для всех игр и приложений для Windows.

Ну, пожалуй ,подведем пока итоги, в чем мы более или менее разобрались, да на этоми закончим сию часть:

* Обьекты (Objects) - реальные обьекты в GM, исполняющие различные действия и реагирующие на события.
* Комнаты (Rooms) - Места (Уровни), где располагаются обьекты.
* Спрайты (Sprites) - картинки для отображения обьектов. Могут быть анимированными.
* Звуки (Sounds) - Собственно звуки в Game Maker, которые могут быть, например, музыкой или озвучкой столкновений и т.п.
* Фоны (Backgrounds) - Фоны для комнат. Анимированными они быть не могут.

Конечно, есть и другие ресурсы, например шрифты, но, так как они не из основных, пока они нам не пригодятся.


Полезные проги:)
 
RagnaRockДата: Воскресенье, 26.09.2010, 13:54 | Сообщение # 2
Апокалипсис
Группа: Постоялец академии
Сообщений: 602
Награды: 13
Репутация: 56
Замечания: 0%
Статус: Offline
Часть вторая. "Вторые шаги" и первая игра.

Конечно, с первого раза, как я уже сказал, вам даже Quake не написать, но реально при старании сделать неплохую (для новичка) игру.
Работаем в простом, не Advanced режиме.

Честно говоря, многие рекомендуют для начала делать Арканоид (Его мы будем делать вторым), но я, последовав совету Марка Овермарса, начну с простейшего "Кэтч зе балл" (Catch the ball, поймай мяч).

Для начала опишем смысл игры, которую мы собираемся сделать (если это сделать перед тем, как делать игру, можно сэкономить много времени).
Игра будет простой: Существует какой-то шар, прыгающий вокруг стен. Задача игрока - попробовать успеть нажать на мяч при помощи мыши. КАждый раз, когда игрок нажимает на мяч, он (игрок) получает очки, и мяч перемещается в другое место.
Насколько видно, нам пригодится два обьекта: мяч и стена. Но начнем мы со спрайтов (Если вы забыли, что это - см. первый пост).

Вы можете использовать стандартные спрайты (Их можно найти в папке "Sprites" в папке, куда установлен Game Maker), можете нарисовать свой собственный, а можете использовать те, которые я выложил ниже:

- стена
- мячик

Создадим спрайт стены. Для этого нажмите Resources ->Create Sprite (Товарищи коллеги, я просто не хочу пугать и путать горячими клавишами).
Откроется окно настроек спрайта. В поле "Имя спрайта" введите "sprite_wall" ("Спрайт_Стена"). Никогда не давайте ресурсам русские имена. Не делайте грубой ошибки.
Пора загрузить спрайт. Нажмите кнопку "Load Sprite" ("Загрузить спрайт"), и откройте спрайт, который Вы будите использовать.
Теперь снимите галочку "Transparent" ("Прозрачный"). Так как стена у нас занимает весь квадрат, то прозрачных участков нам не нужно.
В результате (Если вы используйте мой спрайт) Должно получится примерно следующее:


Теперь смело нажмите кнопку "OK".
Создадим спрайт мячика. Опять нажмите Resources ->Create Sprite, и откроется уже знакомое нам окно. Назовите его "Sprite_Ball" ("Спрайт_Мяч") Загрузите спрайт, который хотите использовать (Рекомендую для тренировки загрузить мой спрайт).
Мяч слишком большой, его надо чуточку уменьшить, примерно на 1/3. Для этого нажмите "Edit Sprite" ("Редактировать Спрайт"), выберите
Transform -> Stretch (Трансформировать -> Растянуть). Введите width и Height (Ширина, Высота) поменьше, например, 24x24 будет неплохим размером. Нажмите OK после ввода ширины и высоты.
Мяч уменьшится, нажмите зеленую галочку слева сверху. Галочку "Transparent" не снимайте, мяч не квадратный.
"Прозрачным" цветом является цвет спрайта в самом низу справа. Этот цвет не рисуется, он "Прозрачный" и сквозь него все видно.
Потом нажимаем OK.

Пора сохранить игру. Нажмите File -> Save и назовите свою игру, например, "catchtheball.gmk". *.gmk - стандартный для GM7 формат проектов.
Теперь создадим обьекты.

Ну, нажимаем Resources -> Create Object. Откроется окно настроек обьекта. Назоваите наш обьект (Впишите в поле "Name") - "Wall", "Стена"
Выбираем Sprite -> И наш спрайт стены, Sprite_Wall. Отмечаем галочку "Solid" ("Твердый"), стены твердые.
Эта галочка отвечает за то, является ли наш обьект "Твердым".

Нажимаем OK, стена неподвижна и ни на что реагировать не должна.

Теперь пора создать и мяч. Создайте еще один объект, назовите его "Ball" ("Мяч"). Назначте ему наш спрайт мяча, Sprite_Ball.
Галочку solid ставить не надо, сквозь мяч проходить никто и не собирается.

Создайте свое первое событие, на которое мяч должен отреагировать - создание мяча.
Для этого нажмите кнопку "Add Event", и выберите "Create" (Лампочка еще рядом). Теперь у нас есть событие, и мяч обязан на него среагировать - собственно говоря, начать двигаться.

Выберите раздел действий "Move" ("Движение") справа. Перетащите справа картинку с восемью стрелками в поле чуток левее. Откроется окно настроек действия, в даном случае - начала движения. красные стрелки - возможные пути направления (Мяч выберет одно из них случайно). Отметьте все восемь стрелок, а в поле "Speed" ("Скорость") - напишите 8. можно и побольше, но играть тогда будет труднее, и за пределы 15 лучше не заходить. Нажмите OK, сохраните игру.

Теперь заставим мяч отскакивать от стен.
Создайте действие, выберите "Collision" ("Столкновение") и как объект выберите Wall. Это событие, действия при котором выполняются при столкновении мяча с - догадайтесь,чем? Да, экземпляром объекта Wall.
Перетащите действие "Bounce" ("Отпрыгнуть") в поле, уже нам знакомое. Посмотреть название действия можно, подержав над иконкой действия мышку.
В настройках действия: precise: precisely, against: solid objects.

Сохраните игру.

Нам пора создать еще одно действие - нажатие на мяч мышкой. Нажмите "Add Event". Выберите Mouse -> Left Pressed (Не left button и не left released!). Перетащите действие "Jump to Random", в настройках действия в полях "snap hor" и "snap ver" поставьте 32.
Перетащите после действия "Jump to random" действие "Move Fixed" (Оно уже нам знакомо) - и поставьте те же настройки, как и в событии "Create" ("Создание").
И последнее действие - прибавить очков, оно будет последним в этом событии. Выберите категорию "Score", там - "Set score" и перетащите. Настройки - new score - 1, Поставьте галочку "Reliative" ("Относительно")
Эта галочка означает, что наши очки надо относительно увеличить на +1. Если ее не поставить, то очки просто будут ставиться на 1 каждое нажатие.

Готово. Теперь сохраните игру и нажмите кнопку в настройках обьекта "Show Information". Если все сделано правильно, то высветится следующее:

Information about object: Ball

Sprite: spr_ball
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Mask:

Create Event:
start moving in directions 111101111 with speed set to 8

Collision Event with object Wall:
bounce precisely against solid objects

Mouse Event for Left Pressed:
move to a random position with hor snap 32 and vert snap 32
start moving in directions 111101111 with speed set to 8
set the score relative to 1


Если все верно, то можно приступить теперь к созданию комнат.
Нажмите Resources -> Create Room. Вы увидите пустую комнату (вернее, пока пустую). Есть несколько вкладок в настройках комнаты, для настроек, для фонов, видов (пока забудьте), и, конечно, вкладка "Objects" для создания в комнате объектов (Выбрана по умолчанию). Выберите сначала стену и создайте их по краям. Для удобства можно сначала ввести в поля "Snap X" и "Snap Y" 32. Это сетка.

Выберите объект "Ball" и создайте его один экземпляр в комнате. Сохраните игру.
Комната должна получится примерно следующей:



Поле под "Object to add with left mouse:" - выбор объекта для создания.
Если что-то не устраивает - правой кнопкой мыши всегда можно удалить объект.

Теперь можно запустить игру в первый раз! Нажмите зеленый треугольничек сверху окна GM. Сначала появится великий Loading, потом игра запустится.
Поздравляю, Вы создали на GM свою первую игру!


Полезные проги:)
 
RagnaRockДата: Воскресенье, 26.09.2010, 13:55 | Сообщение # 3
Апокалипсис
Группа: Постоялец академии
Сообщений: 602
Награды: 13
Репутация: 56
Замечания: 0%
Статус: Offline
Часть 3. Углубляемся дальше - бэкграунды и звуки.

Лучше поздно, чем никогда.

Дорогие читатели моей "статейки", предлагаю Вам дальше углубится в изучение назначений и родов ресурсов в GM. Потом мы их же добавим в нашу первую игру.

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

Фоны. (англ. background)
По названию уже становится очевидно назначение этого типа ресурса. Они являются фонами для комнат; давайте же заменим скучный серый фон, скажем, на фон с травой!

Вы можете использовать свой фон, а можете, при желании, скачать тот, что представлен ниже.



Создадим бэкграунд - Нажмите в меню сверху Resources -> Create background.Теперь рассмотрим появившееся окно.



В основном нам все знакомо уже из окна со спрайтами, но появился новый флажок - use as a tile set. Его мы рассмотрим позже, а пока отмечать его нам не надо.

Отлично, теперь у нас есть бэкграунд. Переименуйте его в back_grass. Теперь назначим его комнате!
Открываем нашу единственную комнату, выбмраем вкладку backgrounds... и... ого! что-то новенькое!



Рассмотрим все эти настройки. Начнем со списка с бэкграундами (не раскрывающегося). Там есть элементы background 0-7. Но где же наша back_grass?

Дело в том, что у этого списка другое назначение. через него не выбираются ресурсы бэкграунды.
Все дело в том, что комнате можно применить максимум 8 бэкграудов. И все они могут быть разными. При этом они рапределены в порядке их перекрытия - то есть, бэкграунд 0 перерывают все остальные бэкграунды, бэкграунд 1 перекрывают все, кроме background0 и так далее.

Чтобы было понятнее, приведу аналогию с калькой. У нас есть 3 слоя кальки. На первом нарисован просто синий фон. На втором - Солнце. на третьем - облака. теперь сначала полоэим слой 1, с фоном, на него слой 2, с солнцем, и третий, с облаками. получается картинка, но на этом чудеса не прекращаются! Начинаем передвиать верхний слой. получается анимация - облака плывут! (на самом деле, на практике применяют 2-3 слоя с облаками и всех их двигают с разной скоростью). А теперь поменяем местами второй и третий слой. Получается бред - солнце перекрывает облака! Нет, раньше было лучше. Таким образом, я надеюсь, вам стало примерно понятно, как перекрывают друг друга бэкграунды.

Так и в Game Maker - 8 слоев, 8 бэкграундов.

Теперь, наконец, разберемся с остальными элементами. Выбираем в этом списке background0 - теперь мы работам именно с этим слоем, самым нижним, так скажем. теперь в другом списке, где пока красуется надпись "", выбираем back_grass. Поздравляю, теперь у нашей (Вашей?) комнаты есть фон. Сохраните игру.

Чуть ниже есть флажки - Tile hor. , Tile ver. , Stretch. Они отвечают за то, как бэкграунд будет "натягиватся на комнату".

Tile hor. Если выбран, то бэкграунд повторяется по горизонтали; в ином случае лишь один экзепляр будет на горизонтальной оси.
Tile ver. Если выбран, то бэкграунд повторяется по вертикали; в ином случае лишь один экзепляр будет на вертикальной оси.
Stretch. Если выбран, то бэкграунд растягиваются на всю комнату; кстати, тогда флажки Tile hor. и Tile ver. игнорируются. Если же флажок не будет выбран, то бэкграунда будет повторятся.

Поэксперементируйте с этими флажками, чтобы примерно понять, как это работает. Очень интересен случай, когда все три флажка не отмечены. Тогда в комнате есть только один экземпляр бэкграунда.

Теперь о различных полях снизу. hspeed, vspeed - скорость передвижения бэкграунда; hspeed - скорость передвижения по горизонтали, а vspeed - по вертикали. оставим их по нулю, трава у нас не едет никуда вроде бы. Хотя, при желании, можете и с ними поэксперементировать.

Мало-помалу наши шаловливые руки дошли до полей x и y. попробуйте набрать в них 100, 100. Бэкграунда сместится; так знайте, она сместилась на 100 пикселов влево и 100 пикселов вниз. А теперь наберите -100, 200. Теперь бэкграунда сместилась на -100 пикселов влево, то есть, на 100 пикселов вправо, и на 200 пикселов вниз. Таким образом, эти поля указывают начальное (!) смещение бэкграунды.

Ну вот и славно. С очередным типом ресурса мы опять разобрались.

А теперь мы перейдем к озвучиванию игры.

Первое, что хочется сказать - звуки играют довольно важную роль в игре. Звуки выстрелов, общение врагов по рации, вскрики полупьяных зомби - все это добавляет игре атмосферности (не путайте понятия "атмосферность" и "реалистичность") и помогает игроку погрузиться в нее еще сильнее. Конечно, игроку будет трудно погрузится в наш вымышленный мир из травы, шарика и стен, но все-таки звуки придадут игре красочности.

Добавим звук отскакивания от стен для начала. Нажмите Resouces -> Create sound... появляется новое окно. Теперь рассмотрим, как всегда, появившееся окно.
Назначение поля "Name" уже, я надеюсь, стало для вас очевидно из предыдущих глав. Все остальное пока ново.



Кнопка "load sound" загружает звук, кнопка "Save sound" его сохраняет (в отдельный файл, конечно). Флажки в табе "Effects" отвечают за разные эффекты - если флажок отмечен, эффект применяется, иначе же эффект не применяется. Поэксперементируйте с ними - загрузите какой-нибудь звук, нажмите рядом с кнопкой "load sound" зеленый треугольничек. Теперь попробуйте понажимать эти флажки.
Теперь о переключателях в этом окне. На самом деле, для нас (пока что) не имеет значения, каким является звук - Normal sound, background music, 3d sound или же будет использоватся мультимедийный плеер. В любом случае, выбирайте пока что "normal sound" для звуков и "background music" для музыки; об их различиях нам пока рано знать. То же самое можно сказать и о флажке "Preload" - чтобы понять его действие,надо знать ядро GM, которое мы рассмотрим позже, а пока не трогайте его и так и оставляйте отмеченным.
Ползунки "volume" и "pan" регулируют громкость и балланс соответственно. Балланс - относительное расположение звука, грубо говоря; двигаем ползунок влево - и он будет "ближе" к левой колонке, двигаем его вправо - он будет "ближке" к правой колонке. Очевидно, чтобы заметить это, пригодятся стереоколонки.
Кнопка "edit sound" открывает ваш стандартный редактор звуков (скорее всего, это будет майкрософтовская "звукозапись") и редактирует загруженный звук. Потом просто его сохраняем.
Теперь, вроде бы, со всем мы разобрались. Загружаем из стандартных GM звуков понравившийся звук для отскока от стены. Называем звук "snd_bounce", при желании можете назначить ему эффекты. Проверьте, чтобы он был "normal sound" и нажмите великую кнопку "OK". Сохраните игру - теперь в ней появился первый звук. Теперь сделаем так, чтобы он воспроизводился при отскоке от стены.

Откройте настройки объекта "Ball", который мы создали во 2 части (главе?) этой статейки. Нажмите на событие "Collision with object Wall", чтобы добавить в него новое действие. Потом из вкладки "main1" (справа) перетащите в действия (где еще находится наше действие отскока от стены) "Play sound". Откроется новое окно; в нем всего поля - sound и loop. В поле sound выбирается звук, флажок "loop" отвечает за повторение звука - если упомянутый флажок отмечен, то звук будет повторятся, иначе же он проиграется один раз. Выберите наш звук snd_bounce, НЕ отмечайте флажок "loop" и нажмите кнопку "OK". Сохраните игру. Теперь посмотрите в действия объекта на событии "Collision with object wall" - добавилось новое действие "Play sound". Напоминаю, что действия выполяняются по порядку, сверху вниз (не путайте события и действия!). Запустите игру.

Хех, теперь при отскоке воспроизводится наш звук. Ура, звук работает!
Теперь добавим музычки. Создайте новый звук "mus_back1", загрузите в него любую понравившеюся музыку. Нажмите ok. Теперь создайте новый объект obj_musiccontroll, который будет отвечать за музыку. Добавим ему одно событие - Create (если вы забыли, что это такое, перечитайте главу 2) и добавьте в него (я имею в виду событие) действие Play sound. В окне выбирает mus_back1, повторять звук надо, значит, отмечаем флажок "loop". Сохраняем игру, запускаем.

Но что это - музыки нет! Ага, мы забыли добавить объект в комнату, точняк. Открываем нашу комнату, добавляем в любое место наш obj_musiccontroll (он все равно невидимый), только смотрите нечайно никакой другой объект не удалите. Запускаем. Работает? Ура, сработало!

На этом великом слове завершаю часть третью.


Полезные проги:)
 
RagnaRockДата: Воскресенье, 26.09.2010, 13:56 | Сообщение # 4
Апокалипсис
Группа: Постоялец академии
Сообщений: 602
Награды: 13
Репутация: 56
Замечания: 0%
Статус: Offline
Глава вторая. Углубление познаний.

Хе-хе, дальше-глубже =D
Часть 0. Предисловие.

Забавно - как же так получается? Хотел написать маленькую статейку, а она в разультате что-то больно растянулась. (Ну это так, лирическое отступление...)
В первой главе я объяснил "на пальцах" принцип работы мясорубки назначение основных ресурсов и как с ними работать. В этой главе я предлагаю углубить ваши знания и мало-помалу поднятся с уровня ниже плинтуса. Конечно, изучать ядро GM нам еще рано... или нет? Плевать, что говорится, разберемся по пути, а пока я предлагаю просто разузнать побольше о GM и его интересностях.
Ну, чего стоим-то?) Давайте скорее переходите к главе 1.


Полезные проги:)
 
RagnaRockДата: Воскресенье, 26.09.2010, 13:56 | Сообщение # 5
Апокалипсис
Группа: Постоялец академии
Сообщений: 602
Награды: 13
Репутация: 56
Замечания: 0%
Статус: Offline
Часть 1. Тайлы.
Недавно мы с вами смотрели окно настроек бэкграунда; там мы встретились с непонятным (пока) нам флажком "use as a tile set". Каково же его значение, и что такое tiles и tile set?

Tiles (тайлы) - грубо говоря, объекты (не-не-не! тайлы - это никак не объекты, просто я в очередной раз объясняю методом лопаты), у которых нет ни событий, ни действий. Они просто стоят на месте, с ними ничего не сталкивается, и страдают фигней, а именно - отрисовывают изображение.
Так зачем же это нам нужно? Как это работает? Дабы ответить на все вопросы сразу, приведу пример.
Создайте новую игру и загрузите в нее данный ниже бэкграунд размера 16x16.


Внимание! Может, флажок "use as a tile set" и связан с тайлами, его пока не отмечайте.

Настройки не меняйте - нас и так все устраивает. Нажмите OK.
Теперь создайте новую комнату и сразу перейдите во вкладу "tiles". В раскрывающемся списке (в верхнем) выберите наш бэкграунд. Теперь нажмите куда-нибудь в комнате - там появится тот самый бэкграунд. Нажмите где-нибудь еще разок. А теперь пройдитесь по тем объектам правой кнопкой мыши. Похоже на расстановку объектов, не так ли? Опять расставьте тайлы и сохраните игру; Запустите ее. Ничего не двигается - да, действительно тайлы бездейственны.
Итак, с тайлами мы кое-как, да разобрались; теперь о тайлсетах.

Слово "тайлсет" просиходит от сокращенного "tile set" - сет тайлов, или по-другому "набор тайлов". Так и есть на самом деле; но как мы можем использовать бэкграунд в качестве набора тайлов?
Дело в том, что иногда (и довольно часто) пихают не один, а сразу несколько тайлов в одно изображение. Приведенная ниже "схемка" покажет, как это возможно:


Вот таким макаром получается изображение, именуемое тайлсетом. Давайте же, скачайте тайлсет и загрузите его в уже созданную нами "игру" в этой главе.

Тайлсет:


Создаем новый бэкграунд, загружаем это изображение и отмечаем великий и всемогущий флажок "use as a tile set", и... окно расширится, опять появляются новые поля, да и весь бэкграунд изрешечен! Так, не паникуем; опять медлеено и спокойно, периодически эксперементируя, ковыряем это окно.

Та сетка, что появилась на бэкграунде - границы изображений. Чтобы понять это, откройте нашу единственную комнату, опять откройте вкладку "tiles", там выберите наш новенький тайлсет. теперь понажимайте по его изображению наверху - выбирается часть изображения, а именно - тайл. Нажмите на нем где-нибудь посередине сначала, поставьте тайл в комнату, потом в другом месте и опять поставьте в комнату... Но с тайлами что-то не так, они "съехали". Ага, хочу вам сразу сказать - оплошность наша в настройках тайлсета заключается.
Опять откройте настройки бэкграунда. Разберемся с новыми появившимися полями.
Во-первых, поля tile width и tile height, очевидно, отвечают за ширину и высоту (соответственно) каждого тайла. Попробуйте поменять их, но после этого обязательно поставьте их обратно на 16.
Во-вторых, поля horizontal offset и vertical offset. попробуйте их поменять - сетка двигается. А теперь вспомните про параметры (x) и (y) у бэкграунда в комнате и поймите их назначение. Да, да - они двигают сетку вдоль бэкграунда.

Теперь два самых интересных поля - horizontal sep. и vertical sep. все дело в том, что нередко для удобства между тайлами на тайлсете оставляют пустое пространство. Так вот, horizontal sep. - расстояние между тайлами по горизонтали, а vertical sep. - расстояние между тайлами по вертикали. Интересно, не так ли? Теперь впишите в эти поля 2, 2. Ура, теперь сетка на месте! Попробуйте порисовать тайлами в комнате.

Теперь о том, зачем это надо. Представим такую ситуацию - у нас есть 100 типов стен, которые между собой ничем не различаются, разве что тем, как они выглядят. Вроде бы можно создать 100 спрайтов и 100 почти одинаковых объектов; нее, поверьте, это далеко не вариант. А как тогда быть?
Все очень просто - создать один невидимый объект, который выполняет функцию стены и заставляем им комнату в тех местах, где должна быть стена. Потом создаем тайлсет и замощаем комнату тайлами с изображениями нужных стен. Это намного быстрее и удобнее.

Вроде бы рассказал все, о чем хотел; ан-не, о кое-чем таки забыли. Откройте комнату, откройте опять вкладку tiles и посмотрите в низ это окна. Там есть список и три кнопки. Втф?
Помните, мы с вами говорили о слоях кальки? Здесь можно привести аналогию - то, что вы видите, и есть слои, и на кажом из них могут находится разные тайлы. У каждого слоя есть своя глубина (напомню: глубина - это, так скажем, расположение объекта относительно третьей оси, то есть, depth (глубина) отвечает за то, как объекты друг друга перекрывают), и чем глубина больше, тем слой от нас дальше (или ниже?). Стоит отметить, что глубина может быть и отрицательной и что стандартная глубина всех объектов - 0.

Стандартный слой тайлов перекрывается объектами с глубиной 0; Нас это не устраивает. Что же, нажав кнопку Add, создадим новый слой тайлов, который объекты перекрывать не будут! как только вы нажали кнопку ад Add, высветится окно с одним полем: depth. Здесь напишите глубину слоя, которая будет меньше нуля, скажем, -100. Теперь выбираем новый Layer -100 из списка и рисуем на нем тайлами.
А что теперь делать со стандартным Layer 1000000, если он нам больше не нужен? конечно, удалить! Выберите из списка этот слой и нажмите кнопку Delete. Да, теперь слой 1000000 и все тайлы на нем вместе с ним улетели в неизведанное пространство помойку, тобиш, удалились безвозвратно.

А если мы теперь хотим переместить слой -100 повыше? Нет ничего проще! Выбираем его из списка и нажимаем кнопку Change. Высветится новое окно, в нем вводим новую глубину слоя (скажем, -200) и нажимаем окей. Кстати, сохраните игру. Теперь слой перемещен.

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


Полезные проги:)
 
RagnaRockДата: Воскресенье, 26.09.2010, 13:57 | Сообщение # 6
Апокалипсис
Группа: Постоялец академии
Сообщений: 602
Награды: 13
Репутация: 56
Замечания: 0%
Статус: Offline
Часть 2. Дверь в другую комнату.

Мы все учились понемногу, чему-нибудь и как-нибудь.
(А.С. Пушкин)

В этой части мы поговорим, так скажем, о путешествиях, а именно - о переходах между конатами.
По теме этой части, я так думаю, уже стало очевидно, что комнат можно создать несколько. Это находит очень широкое практическое применение, в особенности среди новичков. Почему же?
Во-первых, во всех комнатах могут назодится разные объекты (образцы объектов если быть точнее; просто нередко таким образом для простоты сокращают, но помните, что объект и образец объекта - разные понятия), разные бэкграунды, разные заглавия и т.п. Этими особенностями в основном пользуются новички для создания разделения на уровни - в первой комнате уровень 1, во второй - второй уровень игры и т.д.
Однако же, перед тем, как перейти к примеру, расскажу о некоторых нюансах.

Во-первых, объекты не могут действовать сразу в двух комнатах. То есть, например, вы перешли из комнаты 1 в комнату 2 - и тогда все в комнате останавливается, и когда вы перейдете обратно, то все начнется в этой комнате заново (хотя то, что все начинается заново не факт - читаем дальше).


А теперь о том замечательном флажке, который "замораживает" комнату и о расположении которого поговорим, когда перейдем к рассматриванию вкладок настроек комнаты. Этот флажок - "Persistent" (у него есть теска в настройках объекта, но они никак не связаны), отвечает он за заморозку комнаты. Мне придется привести некоторую аналогию, чтобы Вам это попробовать объяснить получше.

Создайте два текстовых файла в блокноте - в одном напишите 1234, а в другом - 5678. сохраните их обоих где-нибудь под названиями "Комната1.txt" и "Комната2.txt", но закройте лишь "Комната2.txt", "Комната1.txt" сейчас не закрываете.
Представьте себе, что цифры - это объекты, которые находятся в комнатах и у которых есть одно действие - как только они появились, они увеличивают соседнее правое число на 1, а текстовые файлы - это комнаты, у одной из которых (а именно - у второй) стоит флажок persistent.


Сейчас мы находимся в первой "комнате" и видим первый файл. Проведем ту операцию, которую должны провести объекты при появлении - увеличить правую цифру на 1. Получится 1345 (подумайте, почему первая цифра не изменилась). Теперь закройте первую комнату и, не сохраняя файл, откройте вторую. там пока написано 5678; после проведения операции получится 5789. Сохраните ее, закройте и опять откройте первую комнату - там опять написано 1234! проведите операцию при желании, теперь откройте вторую комнату. там будет написано: 5789; Да, все сохранилось, НО! Операцию нам проводить не надо - объекты уже появились, просто они были "заморожены". Надеюсь, что после подобного мотыжного объяснения стало понятно о назначении флажка Persistent в настройках комнаты (напомню:а не в настройках объекта). Теперь можете либо удалить те два файла, либо оставить на память, сомневаюсь, что пара байт особо засорит ваш диск Well Ладно, хватит о двух файлах, продолжим изучение комнат примером перехода.

Сделаем простенькую програмку для тренировки. В ней будут две комнаты, переключаемые клавишами "стрелка влево" и "стрелка вправо". Для начала создайте две комнаты и дайте им названия, например, "room1" и "room2". Сделайте, чтобы различать их, их разными, например, сделайте в них разные фоны. Теперь создайте два объекта - obj_r1 и obj_r2. Они будут переключать комнаты. obj_r1 будет стоять в комнате 1, obj_r2 - в комнате 2.

Теперь у объекта obj_r1 создайте событие key press -> Right. В него добавьте действие "Next room" из вкладки "main1". Высветится, как обычно, окно с настройками. В нем единственный список - translition - ээфект перехода между комнатами, можете его поменять.

Теперь создадим аналогичный объект obj_r2. У него будет тоже одно событие - на этот раз key press -> Left. А действие в этом событии - previous room, из той же вкладки, что и "next room". Опять те же настройки, опять выбирайте чего хотите, сохраните игру. Кстати, при желании придайте им спрайты. Теперь, наконец, добавьте объект obj_r1 в комнату 1, а объект obj_r2 в комнату 2. Запустите игру и посмотрим, что происходит.


Нажмите клавишу вправо. мы перейдем в комнату 2 походу - все на это намекает - ее вид, ее фон (или что вы там еще поменяли?). Теперь влево - и мы уже на всех парах летим обратно. Опять вправо, влево, вправо, влево...

Теперь немного о том, что происходит. Действие next room перемещает нас в следующую комнату. "Как это так, - в следующую?" - спросите Вы. А на самом деле все очень просто: комнаты в Game Maker иду по порядку, Если смотреть на их список, то они идут сверху вниз, то есть самая верхняя комната будет первой. Убедитесь в этом самостоятельно.

А теперь вернемся к нашим объектам. obj_r1 стоит в комнате r1 и при нажатии на кнопку "стрелка вправо" перемещает нас в следующую комнату. Там уже нету объекта obj_r1, но там стоит объект orj_r2. Он никак не реагирует на клавишу вправо, но при нажатии "стрелка влево" перемещает нас обратно, используя событие previous room. Кстати, из-за эффектов у некоторых производится аналогия со слайдами из PowerPoint мелкософтовского.

А теперь поэксперементируем с флажком persistent. Создайте в комнате room1 что-нибудь простенькое и движущееся, например, понаставьте стены и опять поставьте наш мяч из catch the ball. Поставьте только у мяча скорость поменьше, а у комнаты флажок "persistent". Сохраните и запустите игру.

Запускаем. Мяч бегает, ловить его не обязательно (если вы, конечно, учли такую функцию wink ). Запомните положение мячика. Переходиим в следующую комнату и обратно. Мячи стартуют со своих же мест! Сработало! Для сравнения можете понаставить мячи и стены и во вторую комнату, коотрая без флажка persistent и вы увидите, что в ней мячи всегда стартуют с тех мест, куда вы их понаставили.

А вот и ссылка на примерчик: Скачать для GM8

Уф, после довольно долгого вбивания вам всего этого, я надеюсь, что вы хоть что-то поняли...


Полезные проги:)
 
RagnaRockДата: Воскресенье, 26.09.2010, 13:58 | Сообщение # 7
Апокалипсис
Группа: Постоялец академии
Сообщений: 602
Награды: 13
Репутация: 56
Замечания: 0%
Статус: Offline
Часть 3. Немножко о ядре и мои дальнейшие планы.

В школе на литре нефиг делать было, решил пописать мальца.

Ну что ж, продолжим наше погружение в море возможностей GM.
На самом деле, дальше я хотел рассказать о других кнопках (помните, вы ими показывали, что делать объекту, перетаскивали еще?) и событиях. Но перед этим, я думаю, мне стоит кое-что рассказать об устройстве GM. Начнем, пожалуй, с понятия переменной.
Если вы раньше уже программировали на таких языках, скажем, Basic, Delphi, Pascal, то вам должно быть уже известно, что это такое. В ином случае читайте текущий абзац, как раз о них в нем и подйет речь. Также вам легко будет представить себе переменную в программировании, если вы помните школьный курс алгебры - можно привести аналогию с переменной из алгебры, причем ни от чего не зависящей. До сих пор не понятно? Хорошо, объясню "на пальцах".
Представьте себе бумажку, на которой записано какое-то важное число. Кто угодно его может менять и читать. Где же это применимо? Вот скажем, например, вам нужно знать количество находящихся на работе сотрудников (приятно представить себя в роли биг босса...). Вы сначала вешаете бумажку с числом "0" - значение переменной равно нулю. Потом каждый входящий сотрудник (предполагаем, что все сотрудники честны) при входе в здание увеличивает это число на 1, а каждый уходящий - умеьшает. Таким образом, посмотрев в любой момент на бумажку, вы будете знать, сколько сотрудников на работе сейчас. Так вот, в компьютерных переменных почти так же - только вот число хранится в оперативной памяти компьютера, и менять его можно не только увеличивая/уменьшая на 1 =)
В GM Стандартных переменных (очевидно, можно вводить и свои - но об этом позже) довольно много, и при помощи их можно задать, например, положение объекта, или посмотреть, в какой комнате сейчас игра. Теперь будем во всем этом копаться, и начнем мы, пожалуй, с здания положения объекта. Для этого вам придется вспомнить координатную систему из школьного курса алгебры - надеюсь, объяснять, что это такое, не надо?
Так вот, в GM есть своя система координат. Ее ось OY направлена вниз, ось OX - вправо, а центр (начало координат) - в левом верхнем углу комнаты (см. рисунок)


Таким образом, положение объекта задается двумя переменными - x и y, но есть одна загвоздка. Дело в том, что на самом-то деле при помощи этих двух переменных можно задать лишь положение какой-то точки,, и возникает вопрос - а относительно как точки позиционировать-то? На рисунке она обоначена крестиком. В физике как правило это центр масс (если точка не задана специально), но откуда GM знать, где центр масс, тем более что наши объекты массы вообще могут не иметь (бла-бла-бла). Конечно, можно было сделать великому Марку и так, чтобы любой объект позиционаровался относительно какой-либо одной точки, скажем, левого верхнего угла спрайта, но Марк нам предоставляет возможность задать эту точку самим, и называется она Origin и задается в настройках спрайта.


Есть два пути - при помощи двух полей (обозначены цифрами 2 и 3), задающими позицию относительно левого-верхнего угла спрайта, или же вы можете просто "тыкнуть" на поле 1. Кстати, крестик на нем как раз показывает origin.
Надеюсь, что это стало понятно. Попробуйте поиграть с этим: есть специальная кнопка (действие) Jump to position, расположенная в первой вкладке "Move", затащите ее (кнопку) в create и меняйте x и y, потом зрите, что получилось. Кстати, а я рассказывал, что такое флажок Relative? Впрочем, если даже говорил, то напомнить тоже неплохо.


Relative = "Относительно" с английского. Приведу пример, чтобы стало понятнее. Вы вводите введенный_x=20 и введенный_y=30, флажок Relative снят. тогда после выполнения действия: x=введенный_x, y=введенный_y (x=20,y=30), а с флажком немного по-другому: x=x+введенный_x, y=y+введенный_y (x=x+20,y=y+30).
Отлично! С позиционированием разобрались, уже хорошо. А теперь разберемся с передвижением. В GM для осуществелния движения объектов новичками предусмотрены 4 переменные - direction, speed, hspeed, vspeed. Начнем по порядку.

* Direction задает направление движения. Вспомните угол поворота из тригонометрии. Задается direcion уголм в градусах, причем не обязательно меньшим 360 и не обязательно положительным.
Ничего не поняли или просто не помните, что такое угол поворота? Ничего, сейчас объясню. Представьте себе часы, идущие задом наперед и повернутые на 90 градусов по часовой стрелке. Таким образом, 12:00 будет показывать ровно вправо. Обозначим это направление нулем. Теперь запустим минутную стрелку (а часовую оторвем =)) и будем отсчитывать количество пройденных ею градусов. Это и будет direction.


12:00 - Это 0, на 9:00 мы уже насчитаем 90 градусов, на 6:00 - 180 градусов, а на 3 (внимание!) - 270 градусов (или -90, но никак не просто 90!), ну и опять стрелка вернется к началу - это будет 360, и не имеет разницы, что 0, что 360.

* Speed - скорость в пикселах за степ. Ну, что такое пиксел, я думаю, вы знаете (кстати, x и y тоже в пикселах (или пикселЯх?) измеряются). Ну а степ - помните, событие степ (эээ, я это объяснял вообще?) - так вот, степ выполняется каждй кадр, поэтому как-то слово "степ" стало к тому же синонимом слов "кадр", "фрейм".
* hspeed, vspeed - проекции speed на ось OX и OY соответственно. Проще говоря, скорость по горизонтали и скорость по вертикали. См. рисунок.


И с перемещением вроде разобались тоже, но у вас все же могли остаться вопросы. Первый из них - что же это за стрелки, на которые мы жали, когда движение в первой игре задавали? Ответ прост - это же он самый, direction, только вот значения ограниченные (диктую направления для стрелок, начинаю с правой, против часовой) - 0,45,90,135,180... и т.д. а посередине квадрат просто пишет: speed = 0 вне зависимости, какой speed вы вписали. Кстати, direction и speed можно задать при помощи экшиона Move free. Поэкперементируйте, кстати, я может скоро для того, чтобы лучше было понятно, что такое угол поворота, напишу страничку на JS ля этого.
Уфф. Потом примеры добавлю. А пока пойду передохну...


Полезные проги:)
 
Форум » Игростроение » Вопросы и ответы » Учебник по game maker (По устаревшей версии gm)
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024 |