Воскресенье, 17 Ноября 2024, 06:41

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Режим 3d (d3d)
Young_DeerДата: Вторник, 23 Ноября 2010, 16:40 | Сообщение # 1
был не раз
Сейчас нет на сайте
Попробую собрать основы работы в 3Д режиме.

Справка Game Maker 8.0 3D графика

Для активации 3Д режима необходимо в установках комнаты создать код:

Code
{d3d_start()}

В 3Д режиме ось Y направленна в обратную сторону, поэтому комната со всем содержимым (объектами и событиями) отразится по вертикали. Если при нажатии "вверх", объект двигался вверх, то теперь будет двигаться вниз.
В 3Д режиме в полной мере будет заметна глубина, поэтому фон комнаты, в том числе тайлы будут очень маленькими, так как находятся на глубине 1000000. В свойствах комнаты можно изменить глубину тайлов на 0

Создание 3Д объекта:
Для придания объема объекту необходимо создать событие "Creat" и вставить код:

Code

xw=10;
yw=10;
z=-10;
z1=0;

где: xw, yw, z размеры создаваемого объекта; z1 - высота низа объекта.
Ось Z направлена от нас в глубь экрана, поэтому значение со знаком минус.
Объект создан, теперь надо нарисовать на нем спрайты. Создаем событие "Draw" и вставляем код:
Code

draw_set_color(c_white);
d3d_draw_block(x1,y1,z1,x2,y2,z2,texid,hrepeat,vrepeat)
draw_set_color(c_black);

координаты указываются относительно объекта. Можно нарисовать спрайты отдельно на каждой стене, функция d3d_draw_wall. Подробнее о функциях рисования и значенях x, y, z

Пример игры в 3D на GM, но мне там многое не понятно, поэтому делаю все с нуля.

Пока что это всё, чему мне удалось научиться за 2 вечера

А теперь вопросы:
1. Как перевернуть координату Y? При работе с комнатой координата Y идет сверху вниз, а при запуске игры снизу вверх. Очень не удобно
2. Как в режиме 3Д сделать объект "твердым"

Пожалуйста поподробнее, что куда прописывать

Добавлено (23.11.2010, 16:40)
---------------------------------------------
Так что, кто-нибудь может дать ответы на вопросы? А то все так пугают новичков человеком-пакетом за глупые вопросы, а на нормальные то и ответить некому

Сообщение отредактировал Young_Deer - Вторник, 23 Ноября 2010, 18:26
AngevengelistДата: Вторник, 23 Ноября 2010, 17:05 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
1) Отключи проекцию(в справке написано) или вручную переверни у тебя у=10, переверни сделав у=-10.
2)Подключить физ. движок
Young_DeerДата: Вторник, 23 Ноября 2010, 18:22 | Сообщение # 3
был не раз
Сейчас нет на сайте
1. А по подробнее, где об этом почитать? Ну переводить все Y на минус не вариант, проблема в том, что при редактировании комнаты ось Y идет сверху вниз, а при запуске игры наоборот, крайне неудобно создавать комнаты к верх ногами.
Может есть какой-то код, который при запуске игры отразит изображение по вертикали и просто еще раз перевернет вид. В настройках вида такого нет.

Отключить проекцию? Какой тогда смыл в 3Д объектах, мне нужен вид сверху в перспективе как в ГТА1.

Второй вопрос отпадает, я не правильно представлял себе "твердость" объекта.

По поводу движков. Зачем они нужны в проекте ГМ и можно ли обойтись без них? Я так понял что движок для ГМ это просто исходник, т.е. проект с уже готовыми объектами, событиями и скриптами. Но я хочу, чтобы всё созданное в проекте прошло через мои руки, чтобы я понимал каждое действие и каждую строчку скрипта, иначе в дальнейшем могут возникнуть трудности из-за непонимания фундаментальных элементов.

AngevengelistДата: Вторник, 23 Ноября 2010, 18:47 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Дай ссылку на официальную справку, а не на этот корявый перевод. Там необходимо работать с матрицами
Young_DeerДата: Вторник, 23 Ноября 2010, 22:24 | Сообщение # 5
был не раз
Сейчас нет на сайте
Официальный представитель, а официального сайта что-то не нашел. Да и в английском я не силен.

Неужели нет более простого способа. Матрицы же будут комп перегружать, а я планирую очень большое количество предметов и большую комнату, поэтому надо все максимально экономично делать.

В первом сообщении я выложил ссылку на пример игры, там как то решена эта проблема, но я не смог понять как =( Там кстати в скриптах комменты на английском.

AngevengelistДата: Вторник, 23 Ноября 2010, 22:29 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Скинь с примера код. Попробую рассказать на пальцах.(сижу с телефона)
Young_DeerДата: Вторник, 23 Ноября 2010, 23:05 | Сообщение # 7
был не раз
Сейчас нет на сайте
В комнате:
Code
scrRoomStart();

отдельный скрипт - scrRoomStar:
Code
global.gtx=0;
global.gty=0;

global.gRoomFirst=instance_create(-100,-100,objRoomFirst);
global.gVector   =instance_create(-1000,-1000,objVector);
//global.gCar      =instance_create(5000,5000,objCarD);

objRoomFirst - глубина -10000000, Видимый, не твердый, не постоянный
В событии "Creat"

Code
global.mid_x=view_xview[0]+(view_wview[0]/2)
global.mid_y=view_yview[0]+(view_hview[0]/2)

В событии "Step"
Code
global.mid_x=view_xview[0]+(view_wview[0]/2)
global.mid_y=view_yview[0]+(view_hview[0]/2)

В событии "Draw"
Code
global.gtx=view_xview[view_current];
global.gty=view_yview [view_current];

objVector - глубина 0, не видимый, не твердый, постоянный
событий нет.

Эти объекты в комнате не обнаружил

Добавлено (23.11.2010, 22:54)
---------------------------------------------
Еще есть вот такие 4 скрипта:
scrDirDiff

Code
var d;
//show_message(string(argument0)+','+string(argument1));
while(argument0<0)do argument0+=360;
while(argument0>=360)do argument0-=360;
while(argument1<0)do argument1+=360;
while(argument1>=360)do argument1-=360;

d=abs(argument0-argument1);
if(d>180)
then result=360-d
else result=d;

scrDirShortest
Code
var cw;
//res: 1=ccw,-1=cw
cw=argument0-argument1;
if(cw=0)then result=0;

if(cw<0)then
begin
   result=-1;
   if(cw>-180)then result=1;
end
else
begin
   result=1;
   if(cw<180)then result=-1;
end;
return result;

scrFind45
Code
//reduces the angle until it is less than 90 (finds reference angle)
var angle;
angle = argument0;
while (angle> 90) angle-= 45;
return angle;

scrFix360
Code
//keeps the angle between 0 and 360
var angle;
angle = argument0;
while (angle> 360) angle-= 360;
while (angle< 0) angle+= 360;
return angle;

Добавлено (23.11.2010, 23:05)
---------------------------------------------
Что-то все не то наверное, может когда будешь с компа, тогда посмотришь как там все устроено. По-моему там где-то что-то еще зарыто, а то удаляешь половину скриптов и все равно при запуске ось Y сверху вниз, как при 2Д

Сообщение отредактировал Young_Deer - Вторник, 23 Ноября 2010, 22:44
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг