Главная » Статьи » Конструкторы игр, системы разработки игр » Game Maker » Создание 3D игр на Game Maker
|
Создание 3D игр на Game Maker
[ Поделиться ]
[ Спасибо! ]
|
20:16
Итак, прежде чем начать расставлять объекты и подгружать в них 3D модели, необходимо включить режим 3D. Ведь вы не прочтете текст, написанный на скомканом листке бумаги, не выровняв его. Представим, что 3D режим - это тот самый скомканый листок, на котором написаны все 3D объекты, 3D модели и прочее, что нужно рисовать в 3D. Для того, чтобы разровнять наш листок, то есть включить 3D режим, создадим объект objCamera. В событии Create (создание) запишем код:
Quote
global.camsin = sin(direction*pi/180); //Эту строку можно просто запомнить.
global.camcos = cos(direction*pi/180); //И эту тоже
d3d_start() //Включаем сам 3D режим.
d3d_set_perspective(true) //Включаем перспективу
d3d_set_lighting(false) //Выключаем свет.
d3d_set_culling(false) //Выключаем НЕотрисовку сторон объектов, которые мы не видим (сложно объяснить, поэтому чтобы понять лучше поэкспериментируйте)
texture_set_interpolation(false) //Выключаем сглаженность текстур (можете включить, просто я предпочитаю выключать сглаженность)
z = 16 //Создаем новую координату Z (для простых игр без прыжков, поднятий по лестницам и тому подобным это можно не делать :D)
3D режим мы включили, теперь нам необходимо сделать прорисовку 3D объектов (чтение, уже выровненного листка).
Для этого, в событие Draw (рисование) напишем код:
Quote
d3d_set_projection(x, y, z, x+global.camcos, y-global.camsin, z, 0, 0, 1) //Эту строку можно также, просто запомнить. Ее изменение вам понадобится ОЧЕНЬ редко, если вообще понадобится
draw_set_color(c_white)
d3d_draw_floor(0, 0, 0, room_width, room_height, 0, background_get_texture(texture1), 16, 16) //Создаем плоскость. Синтаксис: d3d_draw_floor(x1, y1, z1, x2, y2, z2, текстура, hrepeat, vrepeat)
Вот и все.
Теперь осталось только создать фон, с названием texture1, загрузить в него любую текстуру и можете смело запускать ваше творение.
Позже выложу исходник к этой главе.
Глава 2 - Ходим
В этом уроке, я расскажу о том, как можно «заставить» камеру передвигаться по нашему миру. Вернее, как заставить мир передвигаться вокруг нашей камеры, ведь в 3D это так и происходит. Работать мы будем с тем исходником, с которым работали в предыдущем уроке. Откроем его.
Откроем наш объект objCamera и добавим в него событие Step (шаг). Введем следующий код:
Quote
if(keyboard_check(ord("W"))) //Если нажата клавиша W
{
speed = 3 //Идем вперед
}
if(keyboard_check(ord("S"))) //Если нажата клавиша S
{
speed = -3 //Идем назад
}
//Далее начется "самый пугающий код", его можно просто запомнить
if(keyboard_check(ord("A"))) //Если нажали A
{
var xn,yn; ///Инициализируем новые переменные, действующие только в этом скрипте.
xn = x - sin(direction*pi/180); //Вычисляем где у нас лево
yn = y - cos(direction*pi/180); //Вычисляем где у нас лево
if not place_meeting(xn,yn,sblock) //Если ничего не мешает идти (sblock заменить на название родительского объекта всех ваших твердых объектов)
{ x = xn; y = yn; } //Идем влево
}
if(keyboard_check(ord("D"))) //Если нажали D
{
var xn,yn; //Инициализируем новые переменные, действующие только в этом скрипте.
xn = x + sin(direction*pi/180); //Вычисляем где у нас право
yn = y + cos(direction*pi/180); //Вычисляем где у нас право
if not place_meeting(xn,yn,sblock) //Если ничего не мешает идти (sblock заменить на название родительского объекта всех ваших твердых объектов)
{ x = xn; y = yn; } //Идем вправо
}
//Конец пугающего кода
if(keyboard_check(vk_nokey)) //Если ниче не нажимали
{
speed = 0 //Не двигаемся
}
global.camsin = sin(direction*pi/180); //Обновляем значение для global.camsin (ОБЯЗАТЕЛЬНО!!!)
global.camcos = cos(direction*pi/180); //Обновляем значение для global.camcos (ОБЯЗАТЕЛЬНО!!!)
Теперь, добавим событие End Step и запишем в него следующее:
Quote
//Данный код можно не запоминать а просто копировать
//Он нужен для создания свободного обзора мышкой .
xx = (display_mouse_get_x()-(display_get_width()/2))/16 //16 – скорость поворота по X, можно экспериментировать
yy = (display_mouse_get_y()-(display_get_height()/2))/16 //16 – скорость поворота по Y, тоже можно экспериментировать
objCamera.direction -= xx
objCamera.zdir -= yy/32 //С числом 32 можно экспериментировать
display_mouse_set(display_get_width()/2,display_get_height()/2)
Теперь, заходим в событие создания и добавляем туда одну строчку:
Quote
zdir = 0; //инициализируем переменную zdir.
После того, как добавите эту строку, зайдите в событие Draw и замените строку:
Quote
d3d_set_projection(x, y, z, x+global.camcos, y-global.camsin, z, 0, 0, 1)
На
Quote
d3d_set_projection(x, y, z, x+global.camcos, y-global.camsin, z+zdir, 0, 0, 1)
Вот и все, можете смело запускать и бегать.
Если у вас выскочила та или иная ошибка, или же, вы просто чего-то не поняли – обращаться ко мне
Категория: Game Maker | Просмотров: 7448 | Добавил: DraggonFantasy (15.10.2012) | Рейтинг: 5.0/2 |
HTML ссылка на материал: BB ссылка на материал: |
Всего комментариев: 3 | |
| |