Я уже говорил, что создать 3D игру не так уж и сложно. В этом уроке мы еще раз в этом убедимся. Пожалуй мы научим наконец то нашего игрока ходить и создадим атмосферу в игре. Всю работу выполним в три шага:
Создание атмосферы в игре.
Невзрачный фон и отсутствие пола портит нам всю игру. Давайте исправим это. Я предлагаю скачать текстурный пак на нашем сайте, которым мы будем пользоваться: Скачать.
Работаем с полом. Нам для этого нужна texture2. Создадим новый объект - inf_room. Для него создадим событие Draw. Введем скрипт:
d3d_draw_floor(0,0,0,room_width,room_height,0,background_get_texture(pol),24,24);
Это скрипт прорисовки пола. Для него мы используем текстуру pol. Я ее выделил. Тем, кто знает английский несложно догадаться, что пол развернется на всю комнату. Часть кода отвечающего за размеры пола я тоже подчеркнул. Объект создан, но текстуры пола нет. Создаем фон(Backgrounds) с названием pol и загрузим в него texture2. Скинем в комнату объект inf_room. Круто, под ногами есть пол)))
Но серое небо невзрачно... Поэтому меняем цвет неба на голубой. Для этого заходим в настройки комнаты во вкладку Фон и меняем цвет на небесный:
Теперь атмосфера нормальная.
Нормальное передвижение.
Стрелки которые я посоветовал в предыдущем уроке оказались немного отсталым вариантом. Приношу свои извинения. Поэтому почти что полностью меняем систему передвижения. Создадим событие press <Up> и release <Up> для объекта camera. В событие press <Up> вводим скрипт:
speed:=4;
А в событие release <Up> вводим другой скрипт:
speed:=0;
В результате этого скрипта при нажатии на кнопку <вверх> игрок изменит скорость на 4 и пойдет вперед. А если отпустить кнопку, то скорость будет равна 0 и игрок будет стоять на месте.
Препятствия.
А вот и самое интересное! ))). Начнем с того, что каждое препятствие большинство игроделов в Game Maker создают в виде куба.
По сути возможности Game Maker ничем не отстают например от Anim8or или 3D Max. Поэтому продвинутые пользователи в Game Maker могут создать при помощи точек модельку человека, ничем не отключающеюся например от моделек в Counter Strike. Но не об этом сейчас. При помощи texture3 мы сейчас создадим небольшой куб.
Создаем новый фон - toxic. В него грузим texture3. Теперь создадим объект obj_toxic. Создадим для него событие Draw и введем скрипт прорисовки куба:
d3d_draw_block(x-8,y-8,0,x+8,y+8,12,background_get_texture(toxic),1,1);
Скрипт очень прост. Предлагаю вам позже поиграться с ним и разобрать его свойства. Потому, что значения его параметров мне придется объяснять 3 часа, а на практике проверить значения самому - займет минуты 3.
Но бочка какая-то нетвердая. Поэтому поставим галочку на Твердый:
А так же создадим какой-нибудь условный спрайт для объекта. Например зеленый кружок.
Поскольку препятствий в игре много, то прописывать столкновение объекта camera с каждым из них будет мучительно. Поэтому создадим объект wall_parent. Добавим событие для camera - Столкновение с wall_parent. И введем скрипт:
x=xprevious;
y=yprevious;
Теперь поставим "родителя" для объекта obj_toxic:
Скинем в комнату объект obj_toxic и вот! Мы можем теперь с ним столкнутся:
Нормально) Теперь нарисуем стены. Для них создадим sprite1(
d3d_draw_block(x-16,y-2,0,x+16,y+2,64,background_get_texture(sten),1,1);
Создайте объект wall_vert и поставьте для него такие же свойства. Только в событие Draw измените скрипт на:
d3d_draw_block(x-2,y-16,0,x+2,y+16,64,background_get_texture(sten),1,1);
Скрипт почти такой же, но он создает другой по размеру куб.
Кстати, совсем забыл. Создайте фон sten размерами 64x64 и загрузите в него texture1. Теперь "облепите" комнату объектами wall_vert и wall_hor как на рисунке:
Ну вот и все! Можете спокойно запускать игрушку и путешествовать по 3D миру! Не пропустите следующий урок!
|
пятница, 9 ноября 2012 г.
Продолжаем создавать 3D шутер.
Подписаться на:
Комментарии к сообщению (Atom)
ERROR in
ОтветитьУдалитьaction number 1
of Draw Event
for object inf_room:
Trying to get texture from non-existing background.
at gml_Object_inf_room_DrawEvent_1 (line 1) - d3d_draw_floor(0,0,0,room_width,room_height,0,background_get_texture(pol),24,24);
всё ок, спасибо
ОтветитьУдалить