Game Maker - создание игр | HellRoom Games
Февраль 21, 2017, 05:53:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Jelly Killer - релиз!
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1] 2 3 ... 7   Вниз
  Печать  
Автор Тема: Добавление ресурсов (Спрайтов, звуков, тайлов, бэкграундов) из папок.  (Прочитано 33979 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dva_Kota
Гл. Администратор
*

Репутация: 632
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3248



« : Декабрь 08, 2010, 10:05:34 »

Добавление ресурсов (Спрайтов, звуков, тайлов, бэкграундов) из папок.

1. Ресурсы будем загружать все сразу, так как загрузка ресурсов в процессе игры (при создании объектов) тормозит игру.

2. В проекте создаем объект obj_load_resurs. Делаем его постоянным.

3. Помещаем его в самую первую комнату ДО того как туда будут помещены другие объекты. Это нужно для того, что бы загрузить ресурсы до того как они понадобятся другим объектам.

4. А папке с проектом создаем папку resurs (название всех папок может быть любое, какое Вам захочется). В этой папке будут храниться все ресурсы игры. Создадим в папке resurs еще три папки: background, sprites, sounds. Думаю назначение папок понятно.

5. В папку background добавим изображение bac_background.png –  это будет наше фоновое изображение.

6. В папку sprites добавим изображение spr_player.png - это будет спрайт игрока. И добавим изображение spr_gm_strip.png - это изображение будет состоять из трех кадров. Из него мы сделаем анимированый спрайт, для демонстрации загрузки стрипов.

7. В папку sounds добавим звук snd_bullet_01.wav - это будет звук выстрела.

8. В самом начале игры мы загрузим все ресурсы. Для этого открываем объект obj_load_resurs и добавляем событие "создание" ("Create"). В этом событии такой код:

Код:
//Подробнее о функциях, которые здесь используются, и о переменных, которые используются
//в этих функциях, читайте в справке. Там все подробно описано.

//Загрузка спрайтов
sp_player = sprite_add('resurs\sprites\spr_player.png',1,0,0,16,16);
sp_gm_strip = sprite_add('resurs\sprites\spr_gm_strip.png',3,0,0,24,24);

//Загрузка бэкграунда
bac_background = background_add('resurs\background\back_background.png',false,false);

//Загрузка бэкграунда, из которого будем создавать тайлы
bac_tiles = background_add('resurs\background\back_tiles.png',false,false);

//Загрузка звуков
snd_bullet_01=sound_add('resurs\sounds\snd_bullet_01.wav',0,1);

9. Теперь, чтобы использовать какой-либо ресурс, мы будем обращаться к переменным из объекта obj_load_resurs. Для начала добавим объект obj_player. В событие "создание" ("Create") добавляем код

Код:
//Назначение объекту спрайта
sprite_index = obj_load_resurs.sp_player;

Этот код назначит объекту obj_player спрайт, загруженный в начале игры объектом obj_load_resurs. Обратите внимание, мы обращаемся не к имени файла, а к переменной (в начале стоит sp_, а не spr_ – я специально написал разные названия переменной и файла, чтобы было видно, что это не одно и то же).

10.
Дальше я добавил объекту obj_player воспроизведение звука при нажатии клавиши "пробел". Добавляем событие "клавиша нажата - пробел" и в этом событии код:

Код:
//Воспроизведение звука
sound_play(obj_load_resurs.snd_bullet_01);

Думаю тут все понятно. Обращение к звуку такое же, как и к спрайту.

11. Теперь займемся бэкграундом. Чаще всего в игре не одна комната, а несколько. И в каждой комнате свой бэкграунд. По этому бэкграунд должен назначаться каким-то объектом, который будет для каждой комнаты свой, или одним объектом, который будет назначать бэкграунд в зависимости от комнаты. Мы сделаем назначение бэкграунда у объекта obj_player в событии "создание" ("Create"). Добавим такой код:
Код:
//Назначение бэкграунда для текущей комнаты
background_index= obj_load_resurs.bac_background;

Если в игре будет использоваться только один бэкграунд, можно назначить его сразу после загрузки ресурсов в том же объекте obj_load_resurs в событии "создание" ("Create"). Тогда код будет таким:

Код:
//Назначение бэкграунда для текущей комнаты
background_index= bac_background;

Чтобы бэкграунд отображался, в комнате, во вкладке "Фоны" нужно поставить галочку "Видим при старте".

12. Создадим еще один объект obj_gm. Этот объект будет демонстрировать анимацию. В событии "создание" ("Create") добавляем код

Код:
//Назначение объекту спрайта
sprite_index = obj_load_resurs.sp_gm_strip;
image_speed=0.2;    //Скорость проигрывания анимации

Когда мы загружали спрайт sp_gm_strip в объекте obj_load_resurs, то указывали количество кадров (3).
Добавляем в комнату объект obj_gm.

13. Теперь займемся тайлами. В изображении back_tiles у меня нарисованы 4 квадрата. Оно загружено как бэкграунд. Сделаем из него 4 тайла и добавим их в комнату. Делать мы это будем тоже в событии "создание" ("Create") объекта obj_player, так же как и бэкграунд (это можно делать в любое время и в любом объекте, когда вам будет это нужно).
Добавляем такой код:

Код:
//Расставляем тайлы в комнате
tile_add(obj_load_resurs.bac_tiles, 0, 0, 32, 32, 100, 20, 4);
tile_add(obj_load_resurs.bac_tiles, 0, 32, 32, 32, 150, 40, 4);
tile_add(obj_load_resurs.bac_tiles, 32, 0, 32, 32, 200, 20, 4);
tile_add(obj_load_resurs.bac_tiles, 32, 32, 32, 32, 250, 30, 4);

Про функцию добавления тайлов расскажу немного подробнее. Она имеет такой вид:

tile_add(background,left,top,width,height,x,y,depth);


Здесь:
Background – бэкграунд, из которого беруться тайлы;
Left – х верхнего левого угла тайла;
Top – y верхнего левого угла тайла;
Width – ширина тайла;
Height – высота тайла;
x,y – координаты точки, куда поставить тайл;
depth – глубина тайла.

P.S.: Тайлы использовать таким образом не всегда удобно. Если нужно их расствить в самом начале игры, тогда, возможно, лучше загружать их не из папки, а использовать их в проекте и расставлять в комнате. Этот способ может пригодиться, например, для создания следов от взрывов, трупов и т.д. в виде тайлов. Или для создания случайным образом разбросанных по комнате декараций, по которым игрок может ходить, например мелких камней и т.п. Для этого может подойти примерно такой код:

Код:
//Расставляем тайлы в комнате в случайном месте
tile_add(obj_load_resurs.bac_tiles, 0, 0, 32, 32, random(room_width), random(room_height), 4);

Я добавил этот код тоже в событии "создание" ("Create") объекта obj_player.

В архиве статья и пример.

Для автоматической загрузки спрайтов из папки используйте код и пример из темы Автоматическая загрузка спрайтов из папки (аналогично можно загружать и другие ресурсы).

Автор статьи: Dva_Kota
07/12/2010

* Добавление ресурсов из папки.rar (96.18 Кб - загружено 630 раз.)
« Последнее редактирование: Апрель 27, 2011, 22:28:06 от Dva_Kota » Записан

Alcatraz
Flight Dream Studio
«Старожил форума»
******

Репутация: 392
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
3000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Unity 3D3 место в конкурсе: Адекватные игры #2 [Стимпанк]2 место за игру: Dead Night (Конкурс Золотые Руки)...
API: Unity 3D
Деятельность: GML, C++, C#, Java Script, PHP, LUA, Pascal ABC
Сообщений: 3396

http://vk.com/alcatraz_rus


WWW
« Ответ #1 : Декабрь 08, 2010, 11:45:35 »

Молодец, полезная статья!
Записан

VeGaS
«Старожил форума»
******

Репутация: 269
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
2000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]3 место за игру: AntiZombie (Конкурс Золотые Руки)1 место: Звание лучшего дизайнера (Февраль 2011)За добавление полезных программ!
API: GameMaker Studio Standard
Сообщений: 2024



« Ответ #2 : Декабрь 08, 2010, 11:57:33 »

А формат в конце обязательно надо указывать? (Например *.png, *.wav и т.д.)
Записан
VeGaS
«Старожил форума»
******

Репутация: 269
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
2000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]3 место за игру: AntiZombie (Конкурс Золотые Руки)1 место: Звание лучшего дизайнера (Февраль 2011)За добавление полезных программ!
API: GameMaker Studio Standard
Сообщений: 2024



« Ответ #3 : Декабрь 08, 2010, 11:58:53 »

А статья полезная! Как раз начал применять внешние ресурсы
Записан
Dva_Kota
Гл. Администратор
*

Репутация: 632
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3248



« Ответ #4 : Декабрь 08, 2010, 12:01:40 »

Если ты про то что в кодах, то да, обязательно. А если про то что в тексте (например "7. В папку sounds добавим звук snd_bullet_01.wav - это будет звук выстрела."), это я просто указал чтобы видно было какие я файлы использую.
Записан

Hummer
scio me nihil scire
GM Pro user
*

Репутация: 327
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2575


« Ответ #5 : Декабрь 08, 2010, 13:18:33 »

Очень даже хорошо  ;)
Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
Vendet
Гл. Администратор
*

Репутация: 766
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Сообщений: 3963


HellRoom Games


WWW
« Ответ #6 : Декабрь 08, 2010, 13:40:21 »

Отлично  Уважуха
Записан

KraVser
Участник
****

Репутация: 1
Offline Offline

API: 8.0 Pro
Сообщений: 121



WWW
« Ответ #7 : Январь 03, 2011, 21:08:01 »

Объясните нубу - зачем это надо? Это чтобы БОЛЬШИЕ игры весили меньше и не глючили?  ??? ???
Записан

Dva_Kota
Гл. Администратор
*

Репутация: 632
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3248



« Ответ #8 : Январь 03, 2011, 21:20:25 »

Если ресурсы расположены не в ехе файле, а в поапках - игра работать будет быстрее. К тому же удобнее потом заменять ресурсы на другие. Например делаешь игру, сначала спрайты берешь какие найдешь, а потом, легко будет их заменить на другие.
Записан

KraVser
Участник
****

Репутация: 1
Offline Offline

API: 8.0 Pro
Сообщений: 121



WWW
« Ответ #9 : Январь 03, 2011, 21:23:51 »

ага, значит ето и есть "выгрузка ресурсов"? ::) ::)
Записан

Dva_Kota
Гл. Администратор
*

Репутация: 632
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3248



« Ответ #10 : Январь 03, 2011, 21:26:30 »

Ну не знаю.. Возможно под "выгрузкой ресурсов" подразумевается удаление из памяти не используемых ресурсов.
Записан

KraVser
Участник
****

Репутация: 1
Offline Offline

API: 8.0 Pro
Сообщений: 121



WWW
« Ответ #11 : Январь 03, 2011, 22:02:59 »

Нет нет, это и есть вот эта "выгрузка ресурсов"
Спасибо огромнейшое! Уважуха Уважуха Уважуха
Записан

KraVser
Участник
****

Репутация: 1
Offline Offline

API: 8.0 Pro
Сообщений: 121



WWW
« Ответ #12 : Январь 04, 2011, 11:00:29 »

А вопрос! Объект obj_load_resurs помещять в каждую игровую комнату, или только в первую?
Записан

Alcatraz
Flight Dream Studio
«Старожил форума»
******

Репутация: 392
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
3000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Unity 3D3 место в конкурсе: Адекватные игры #2 [Стимпанк]2 место за игру: Dead Night (Конкурс Золотые Руки)...
API: Unity 3D
Деятельность: GML, C++, C#, Java Script, PHP, LUA, Pascal ABC
Сообщений: 3396

http://vk.com/alcatraz_rus


WWW
« Ответ #13 : Январь 06, 2011, 11:27:02 »

Можно только в первую, но сделать его постоянным!
Записан

assassin94
Новичок
*

Репутация: 0
Offline Offline

Сообщений: 5


« Ответ #14 : Январь 06, 2011, 11:38:40 »

Круто! ;D
Записан
Страниц: [1] 2 3 ... 7   Вверх
  Печать  
 
Перейти в:  

Vendet | HellRoom Games © 2006-2017 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines