пятница, 9 ноября 2012 г.

Шарик в 3D пространстве.



Недавно меня спрашивали: "Как сделать 3D от 3-его лица?". Я махом сконструировал небольшой исходник(выложу позже)... Но в процессе его разработки случайно набрел на идею написать урок по созданию несколько абстрактной 3D игры.

И так, что нам толком нужно. Во первых нам нужно три следующих спрайта:
  • (32x32) player_spr - бесполезный спрайт, который нам облегчит планирование карты.
  • (32x32) camera - тоже бесполезный спрайт, но все же сделайте его.
  • (64x64) pl - ну а это единственный спрайт, который будет виден. 
Далее нам нужна текстура пола. Ее следует добавить в папку Backgrounds и назвать по нашему, по русскому - pol Подготовительная часть работы завершена. Приступаем к созданию игры.

Создайте объект obj_cam и добавьте в событие create следующий весьма привычный скрипт:

d3d_start();
draw_set_color(c_white);
z=15; 

Думаю тут все понятно. Кстати, заметили? Я по другому оформил код! Или это никому не интересно? ...  

Ладно, немного юмора еще никому не повредило. Идем дальше. Создайте событие Step и там напишите уже другой скрипт:

direction:=player.direction
x:=player.x+100
y:=player.y-100

Теперь камера будет как бы "выравниваться" в отношении игрока, а так же следовать за ним. 

Ну и наконец приступим наверное к самому сложному коду. Ниже приведенный код, это стандартный скрипт привязки камеры к игроку. Он присутствует почти во всех 3D играх от третьего лица в Game Maker. В общем копируйте, сразу не запомните (По крайне мере я до сих пор его по бумажке списываю):

d3d_set_projection(x,y,25,player.x+cos(player.direction*pi/180),player.y-sin(player.direction*pi/180),15,0,0,25)
//пишется на одной строке
Поздравляю! Мы только что завершили наладку камеры! Остался только сам объект игрока. И так, создайте объект player

Сейчас я впервые напишу управление игроком одним скриптом. Это не потому, что я захотел вас помучить и заставить разбираться что мы написали. Просто обычным способом будет долго... В общем кто не поймет - отпишитесь в комментариях, а пока создайте событие Step и впишите следующий простой, но массивный код:

if keyboard_check(ord('W')) then
speed:=5;

if keyboard_check(ord('S')) then
speed:=-5;

if keyboard_check(ord('A'))
direction += 3;

if keyboard_check(ord('D'))
direction -= 3;

if keyboard_check(ord('')) then
speed:=0;

Управление готово! Игрок уже в принципе может бегать... Но не забываем про графику! Сейчас мы нарисуем игрока уже для трехмерного пространства. Для этого создайте событиеDraw и в нем введите скрипт:

tex = sprite_get_texture(pl,image_index);
  d3d_draw_wall(x-8,y-8,19,
                x+8,y+8,3,tex,1,1);

Вроде бы все готово... Но тут вам подарочек от фирмы...  Делаем пол для комнаты. Создаем объект my_inf и добавляем событие Draw где пишем следующий код:

d3d_draw_floor(0,0,0,room_width,room_height,0,background_get_texture(pol),24,24);

Ну теперь основная часть готова! Осталось только разместить все объекты в комнате. Сделать вы это можете в принципе сами. Всем пока! Наслаждаемся абстрактной игрой.

Комментариев нет:

Отправить комментарий