Вторник, 03 Декабря 2024, 19:59

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [83]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [148]
Статьи о программах для создания игр, уроки и описания.
Софт [44]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [168]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [133]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Кто вы?
Всего ответов: 24701
Главная » Статьи » Создание игр

Создать генерацию ландшафта в GM8 + смена дня/ночи
Здравствуйте! Сегодня я проведу урок, где мы научимся создавать свою генерацию, как в minecraft.
Шаг 1 - простейшая генерация
Создадим спрайт камня и земли. Переименуем их в "spr_dirt" и "spr_stone". В спрайте земли делаем 2 кадра. Первый кадр - кадр земли. Второй - делаем кадр травы. Делаем объект с пустым спрайтом. Называем его "generator". Создаём 2 объекта -
"obj_dirt" и "obj_stone". Пишем код:
Code

for(xx=0;xx<room_width + 32;xx+=32)  

//Ширина генерации земли
{
for(yy=352;yy<room_height +  

32;yy+=32) //Высота генерации земли.  
{
instance_create(xx,yy,obj_dirt)  

  //Создаём объект земли.
}
}


Итак, давайте подробнее рассмотрим этот код. Первая строчка - цикл, который генерирует землю в ширину. Вторая - генерирует в высоту. Для значения переменной yy используйте границу генерации земли. В моём случае - это 352 по y. Ну, и третья - генерирует сам блок в координатах xx и yy. Теперь дописываем такие строчки кода:
Code

for(i=0;i<20;i+=1)
{
instance_create(random(room_width),320,

obj_dirt)
}

Эти строчки случайно генерируют объект земли.
Шаг 2 - усложнение генерации
Давайте усложним генерацию! К примеру, чтобы генерировались холмы. Для этого заходим в obj_dirt и создаём событие Step. Далее мы пишем:
Code

if place_meeting(x,y,obj_dirt)
{
y-=32
}

Тут всё просто. При встрече с землёй, земля перемещается вверх на 32 пикселя. При запуске игры мы увидим то, что генерируются холмы.
Шаг 3 - камень и трава
Итак, чтобы создать камень, надо также зайти в obj_dirt и в step прописать:
Code

if place_meeting(x+32,y,obj_dirt) && place_meeting(x,y,obj_dirt)
{
instance_create(x,y,obj_stone);
}

То-есть, если рядом с блоком земли находится ещё один блок земли, и если земля касается тоже блока земли, то мы создаём блок камня.
Теперь создадим траву. Для начала, в объекте земли в create прописываем:
Code

image_index=0
image_speed=0

Код очень прост. Кадр спрайта равен нулю и скорость анимации тоже равна нулю. В step пишем:
Code

if place_free(x,y-32)
{
image_index = 1;
}
else image_index=0;

Тут тоже всё очень просто. Если вверху свободен блок, то кадр равен единице.
Шаг 4 - День и ночь
Этот вопрос волновал многих игроделов - как сделать день и ночь?
Это на самом деле очень просто. Для начала создаём объект - night_controller.Указываем глубину на 1000. Создаём спрайт с размером комнаты. Делаем его чёрным. В night_controller, в create пишем:
Code

sprite_index=spr_night //Пишем это здесь, чтобы не удалить все объекты в комнате.
alarm[0] = 120; //Запускаем аларм
image_alpha=0 //Прозрачность равна нулю

Теперь, создаём событие Alarm 0, пишем код
Code

if image_alpha<1 //Если прозрачность меньше единицы...  

{
image_alpha+=0.1 //...Прибавляется +1 процент прозрачности
alarm[0]=10 //Здесь устанавливаем скорость смены дня на ночь
}else if image_alpha>=1 //Если прозрачность больше единицы
{
alarm[1]=120 //То идёт смена ночи на день
}


Создадим аларм 1 и опять пишем код, точнее копируем его и изменяем так, как показано в коде.
Code

if image_alpha>0 //Если прозрачности нет (меньше чем нуль)...

{

image_alpha-=0.1 //Прозрачность изменяется на -1 процент
alarm[1]=10 //Устанавливаем время смены ночи на день
}else if image_alpha<=1 //Если прозрачность меньше 1...
{
alarm[0]=120 //...То идёт день.
}

Система готова. Главное - ставить obj_night_system в самый верхний угол ( по координатам 0,0).
Шаг 5 - Рендер
Теперь приступим к рендеру. В этом шаге подразумевается то, что у вас есть готовый, запрограммированный игрок и вид для него.
Зайдите в объект generator и создайте Step событие. Пропишите код:
Code

instance_deactivate_object(obj_dirt) //Отключаем объекты земли
instance_deactivate_object(obj_stone) //и камня

instance_activate_region(view_xview[0],view_yview[0],view_hview[0],view_wview[0],true) //Активируем все объекты, которые находятся не за пределами границ вида.  

Теперь в объекте generator, в create изменим наш цикл, который генерирует случайно землю, например на 2000 блоков. В настройках комнаты изменим ширину, например на 10000, а высоту на 1000.
Шаг 6- добавление тайлов, финал.
Вот и последний этап. Здесь мы научимся ломать блоки и добавлять на задний фон тайл. Создадим фон 32 на 32. Для заливки используйте затемненные спрайты земли и камня. Теперь в объектах блока камня и земли при событии левой кнопки мыши пишем:
Code

instance_destroy();
tile_add(имятайла,0,0,32,32,x,y,10); //1 Аргумент - имя тайла. 2 и 3 - не нужные аргументы. 4 и 5 размер тайла. 6 и 7 x и y. и 8 - это глубина.

Вот и получился наш генератор. Спасибо за просмотр.
Категория: Создание игр | Добавил: WhoAmI (08 Декабря 2012)
Просмотров: 15460 | Комментарии: 19 | Рейтинг: 4.4/14 |
Теги: случайный генератор, Game Maker, Generator, minecraft 2D, GM8, Урок, GML, сутки, Block, 2D генерация
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Создать генерацию ландшафта в GM8 + смена дня/ночи», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 191 2 »
+0-
19 Alet   (08 Июля 2016 17:13) [Материал]
AletИногда когда я иду по миру прямо передо мной вырастают столбы из камня. %)

+0-
18 sasha3270   (09 Марта 2014 01:42) [Материал]
sasha3270Мне видает такую ошибку. Из етого урока я использовал только смену дня и ночи(Может в етом причина?).

___________________________________________
################################################################################# ###########
FATAL ERROR in
action number 1
of Create Event
for object night_controller:

Push :: Execution Error - Variable Get -1.spr_night(100006, -1)
at gml_Object_night_controller_Create_0 (line 1) - sprite_index=spr_night //Пишем это здесь, чтобы не удалить все объекты в комнате.
################################################################################# ###########

+-2-
16 ahmed-r   (06 Февраля 2013 11:10) [Материал]
а чё у меня ночь не наступает

+1-
17 WhoAmI   (07 Февраля 2013 22:38) [Материал]
WhoAmIпопробуй поменьше установить в аларме. Это уже не ошибка чтатьи

+-3-
15 vampir0305   (06 Января 2013 11:33) [Материал]
vampir0305WhoAmi у меня вообще не запускается!
я запускаю у меня мелькнёт процесс и выключается сразу! чё делать?

+3-
13 SeDanZet   (29 Декабря 2012 21:04) [Материал]
SeDanZetWhoAmI, у меня не получается с генерацией. Один раз врубил - сгенерировалась только земля. Второй раз- тоже самое и на том же самом месте. Может я упустил что-то?

+1-
14 WhoAmI   (30 Декабря 2012 23:33) [Материал]
WhoAmIхмм... это скорее всего ошибка с статьёй сейчас проверю..

+3-
11 Quad69   (26 Декабря 2012 19:23) [Материал]
Киньте плиз исходник с генерацией , я нечего не понял sad

+1-
12 WhoAmI   (27 Декабря 2012 15:52) [Материал]
WhoAmIИсходник на форуме. (я ттуда статью выкладывал)

+1-
10 WhoAmI   (26 Декабря 2012 13:36) [Материал]
WhoAmIПустота... Пустота smile wink

+4-
9 WhoAmI   (13 Декабря 2012 11:58) [Материал]
WhoAmIПожалуйста говорите ошибки, плюсы. Мне сейчас важно понять какие минусы/плюсы в моей статье.

+3-
5 Dj_FroZTBite   (11 Декабря 2012 15:20) [Материал]
Dj_FroZTBiteДавно мучал один вопрос. А куда писать скрипты то? Что то вообще не могу найти. cry

+2-
6 mikha15   (11 Декабря 2012 15:26) [Материал]
mikha15Когда будешь создавать объект найди в действиях раздел control,строчку code и выбирай что тебе нужно.

+4-
7 Dj_FroZTBite   (11 Декабря 2012 17:13) [Материал]
Dj_FroZTBiteспасибо большое dry

+2-
8 WhoAmI   (11 Декабря 2012 17:24) [Материал]
WhoAmIЯ как-раз объяснять новичкам учусь. biggrin biggrin
Вообщем, видишь синий кружок на верхней панели?Это называется создать объект. Нажми на него. Далее нажми Add Event. Это событие. Я писал какие события надо нажимать. Далее нажми на вкладку Control, и перетащи значок с листом( значок с листом, а не с листом и галочкой(!))

+5-
2 MrNesh   (09 Декабря 2012 19:17) [Материал]
MrNeshЯ о генерации

+3-
3 WhoAmI   (09 Декабря 2012 21:19) [Материал]
WhoAmIПри рендере лагать не должно.. Даже у меня не лагает biggrin

1-10 11-11
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • GameGuru MAX
  • Sprite Widget
  • Dimension3
  • Adventure Maker
  • WindMill
  • Intersect Engine
  • Minko
  • Jet3D
  • Apocalyx
  • LGCK Builder
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг