Создать генерацию ландшафта в 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. Теперь дописываем такие строчки кода:
Эти строчки случайно генерируют объект земли. Шаг 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 - это глубина.
Вот и получился наш генератор. Спасибо за просмотр.
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создать генерацию ландшафта в GM8 + смена дня/ночи», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Мне видает такую ошибку. Из етого урока я использовал только смену дня и ночи(Может в етом причина?).
___________________________________________ ################################################################################# ########### FATAL ERROR in action number 1 of Create Event for object night_controller:
WhoAmI, у меня не получается с генерацией. Один раз врубил - сгенерировалась только земля. Второй раз- тоже самое и на том же самом месте. Может я упустил что-то?
Я как-раз объяснять новичкам учусь. Вообщем, видишь синий кружок на верхней панели?Это называется создать объект. Нажми на него. Далее нажми Add Event. Это событие. Я писал какие события надо нажимать. Далее нажми на вкладку Control, и перетащи значок с листом( значок с листом, а не с листом и галочкой(!))