Создать игру, создание игр, конструктора игр, игровые движки, разработка игр, сделать игру
Приветствую Вас Гость · Вход · Регистрация  ·  Новые сообщения · Участники · Правила · Поиск · RSS
  • Страница 1 из 1
  • 1
3D FPS на Game Maker
SkorpyX Дата: Суббота, 23.03.2013, 20:02 | Сообщение # 1
( Let's rock! )
Просмотр профиля: SkorpyX

Сообщений: [251]
Статья"Создание 3D</b><b>FPS"
В данной статье я познакомлю вас с основами создания
3D FPS в популярном конструкторе игр Game Maker.
Создадим новый проект. Откроем Global Game Settings -> Ошибки и поставим
галочку на «Присваивать неинициализированным переменным значение 0».
Создадим спрайт spr_hero, зальём
его белым цветом и поставим начало координат «По центру».
Создадим
обьект obj_hero, это и будет
наш ГГ. Присвоим ему spr_hero.  В
событии Create
напишем:

Цитата
d3d_start()  // Включаем 3D режим
depth=1000   // Обьект игрока должен иметь наибольшую
глубину, иначе будут косяки с камерой
zdir=0   // Переменная
для движения камеры по оси z


Создаём
событие Step
и
пишем туда код:

Цитата
direction-=((display_mouse_get_x()-display_get_width()/2)/5)   // Поворот камеры по direction
zdir+=((display_mouse_get_y()-display_get_height()/2)/5)   // Поворот камеры по zdir
//
/5 – это чувствительность камеры, чем больше делитель тем меньше
чувствительность
if (zdir < -75) {zdir = -75} else if (zdir > 75) {zdir = 75}   // Ограничение поворота камеры вверх и вниз
display_mouse_set(display_get_width()/2,display_get_height()/2)   // Ставим курсор на центр экрана


Создаём событие Draw и
пишем туда код:

Цитата
d3d_set_projection(x,y,20,x+lengthdir_x(10,direction),y+lengthdir_y(10,direction),20+lengthdir_y(10,zdir),0,0,1)   // Это сама камера, где 20 – её высота.


Итак, мы создали игрока, но он пока что не может
ходить, исправим это.
Во многих FPS по нажатию «SHIFT» персонаж ускоряется, для этого
откроем событие Step
и
дополним код строкой:

Цитата
ifkeyboard_check(vk_shift) {spd=1.2} else {spd=0.6}


Теперь ходьба:

Цитата
ifkeyboard_check(ord('W'))
{
if
place_free(x+lengthdir_x(spd,direction),y) {x+=lengthdir_x(spd,direction)}
if
place_free(x,y+lengthdir_y(spd,direction)) {y+=lengthdir_y(spd,direction)}
}
if
keyboard_check(ord('S'))
{
if
place_free(x-lengthdir_x(spd,direction),y) {x-=lengthdir_x(spd,direction)}
if
place_free(x,y-lengthdir_y(spd,direction)) {y-=lengthdir_y(spd,direction)}
}
if
keyboard_check(ord('A'))
{
if place_free(x+lengthdir_x(spd-0.1,direction+90),y)
{x+=lengthdir_x(spd-0.1,direction+90)}
if
place_free(x,y+lengthdir_y(spd-0.1,direction+90))
{y+=lengthdir_y(spd-0.1,direction+90)}
}
if
keyboard_check(ord('D'))
{
if
place_free(x+lengthdir_x(spd-0.1,direction-90),y)
{x+=lengthdir_x(spd-0.1,direction-90)}
if
place_free(x,y+lengthdir_y(spd-0.1,direction-90))
{y+=lengthdir_y(spd-0.1,direction-90)}
}


Итак, мы создали основу ГГ.
Создадим новую комнату, поставим ей room_speed=60, для большей плавности камеры.
Теперь приступим к созданию пола.
Создадим спрайт spr_floor и
загрузим для него любую текстуру. Создадим обьект obj_floor. В Событии Create ему пропишем:

Цитата
texture=sprite_get_texture(spr_floor,0)
xtex=16   // Ширина вашей текстуры, в данном случае 16
ytex=16   // Высота вашей текстуры


Создадим событие Draw и
пропишем:

Цитата
draw_set_color(c_white)  // Установим цвет рисования
d3d_draw_floor(0,0,0,room_width,room_height,0,texture,room_width/xtex,room_height/ytex)   // Рисуем пол во всю комнату


Если вы хотите нарисовать потолок, то дополним код
строкой:

Цитата
d3d_draw_floor(0,0,32,room_width,room_height,32,texture,room_width/xtex,room_height/ytex)   // Где 32 – это высота потолка


Можем запустить игру и побегать по карте biggrin

Добавим стенки.
Для этого создадим спрайт любого цвета размером 16x16 и назовём его obj_wall. Создадим спрайт tex_wall и
загрузим ему текстуру стены. Создадим обьект obj_wall и
присвоем ему этот спрайт.
Поставим обьекту галочку на «твёрдость». В событии Create напишем:

Цитата
texture=sprite_get_texture(tex_wall,0)


Добавим событие Draw с кодом:

Цитата
d3d_draw_block(x,y,32,x+16,y+16,0, texture,1,1)   // Где 32 – высота стены. Мы могли бынаписать сначала 0, а потом 32, но тогда бы текстура перевернулась.


Теперь добавим стрельбу!
Создадим спрайт spr_bullet размером
4x4.
Создадим обьект obj_bullet и
присвоим ему данный спрайт.
В Create напишем:

Цитата
direction=obj_hero.direction
zdir=obj_hero.zdir
z=20
speed=5   // От этого зависит скорость пули


Добавим событие «Вне границ комнаты» и напишем код:

Цитата
Instance_destroy()


В событии Step:

Цитата
z+=lengthdir_y(6,zdir)


Пулька готова, можете убрать ей видимость.
Откроем obj_hero
и пропишем код:

Цитата
fire=1   // То есть мы можем стрелять


Создадим событие «Глобальная левая кнопка мыши» с
кодом:

Цитата
If(fire=1)
{Instance_create(x,y,obj_bullet)}
// Если можем стрелять, то создаём пульки
fire=0   // Мы не можем стрелять некоторое время
alarm[0]=3   // Чем меньше значение, тем чаще стрельба


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




Сообщение отредактировал: SKORPION98 - Суббота, 23.03.2013, 20:11
ZiP Дата: Суббота, 23.03.2013, 20:07 | Сообщение # 2
( περιμετρ )
Просмотр профиля: ZiP

Сообщений: [887]
Цитата (SKORPION98)
В данной статья я

Исправь.=)
А в общем плане хорошо, продолжай в том же духе.=)


☼Настройка профиля|↕Написать жалобу на пользователя|▲Правила сайта|░мои темы
BSC Hard|Death Jeep|WSC B&W|Моб.платформер|BSC Hard 2|Последняя Миссия|Christmas Story
░▒▓ Z7NV ▓▒░
SkorpyX Дата: Суббота, 23.03.2013, 20:11 | Сообщение # 3
( Let's rock! )
Просмотр профиля: SkorpyX

Сообщений: [251]
спасибо =)

drcrutelo_ndigger Дата: Четверг, 27.06.2013, 18:05 | Сообщение # 4
Просмотр профиля: drcrutelo_ndigger

Сообщений: [166]
Спасибо , хорошая статья
daffy-doomer Дата: Четверг, 13.03.2014, 19:08 | Сообщение # 5
( F=ma=m*(dp/dt) )
Просмотр профиля: daffy-doomer

Сообщений: [77]
Создание неба на основе плоскости.

Для начала возьмем эту текстуру


Загрузите ее в Backgrounds и назовите tex_sky

Создайте объект с названием skyplate и в событии Draw
пропишите код:

d3d_draw_floor(0,0,64,room_width,room_height,64, background_get_texture(tex_sky),1,1);

Где видим:
d3d_draw_floor - вызов метода отрисовки плоскости в пространстве
(x1,y1,z1,x2,y2,z2,id,scalx,scaly)
x1,y1 - начальные значения отрисовки нашей плоскости, а так как это "небо", то отрисовка будет из начала координат.
z1 - высота первой вершины плоскости.
x2,y2 - конечная точка отрисовки плоскости.
z2 - высота второй вершины плоскости.
id - название текстуры, при использование back'а будет - background_get_textures(id), при использовании спрайта будет - sprite_get_textures(id,номер слоя).
scalx,scaly - повторение текстуры или же, кол-во полигонов на плоскости (изменяйте значение, что бы понять для чего это).

Наглядный пример, как видит компьютер.


http://daffy-doomer.deviantart.com
Dead Song Revolution


Сообщение отредактировал: daffy-doomer - Четверг, 13.03.2014, 19:08
  • Страница 1 из 1
  • 1
Поиск:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр