Прыжок в FPS через DCE

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / Прыжок в FPS через DCE

Страницы: 1 2 Next>> новая тема

Автор Сообщение

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 20-05-2009 18:52
Снова я...
Вообщем пробовал по-разному, но ничего так и не получилось.
Смотрел в примерах, там высота игрока соотносится с высотой земли. Но как бы я ни старался, ничего нормально работать не хочет... уже на стену лезть стал от безысходности, пришлось обратиться к вам. Если будет не трудно, опишите по-подробнее, как можно реализовать этот самый прыжок...

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 20-05-2009 19:32
Нормальный прыжок трудно реализовать, если в DCE используется, так сказать, "монолитная" карта. Неизбежно возникают ошибки в просчетах. Но если уровень составлен из отдельных кубиков, то никаких проблем быть не должно. Так что лучше создать на месте объектов карты невидимые кубы и использовать их в DCE для столкновений.
Проблема в том, что в DCE из-за какого-то бага не работает автоматическая гравитация. Поэтому и приходится сверяться с высотой земли.

floor_y=ObjectGetGroundHeight(player,level)+5;
if floor(ObjectGetPosition(player,1))>floor_y
{
if jump>0 jump-=0.05;
grav+=0.05;
}
else
{
jump=0;
grav=0;
}
DceMove(player,0,jump-grav,0, 0.5);

Старый классический алгоритм. Я его даже не сам придумал, просто адаптировал.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 20-05-2009 19:39
Спасибо...но я так уже пробовал...игра просто виснет(((

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 20-05-2009 19:44
А занесены ли кубы в потомки для level? Обновляете ли состояние DCE функцией DceManagerStep(dce,0.1)? Не спрятаны ли кубы ObjectHide'ом? Просто это отключает их для DCE, надо вместо этого использовать невидимый материал.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 21-05-2009 15:14
Я делал без кубов, просто создал камеру и прикрутил её к сфере. Столкновения работаю нормально.В step Функцией DceMove(cube,0,-2,0,1); сферу постоянно тянет вниз, вроде как вот она гравитация, но прыжка как такового нет...то есть нажатием клавиши игрок просто поднимется вверх, а если клавишу отпустить, то он также опускается назад. Всю голову сломал уже...Я сначала хотел стандартным набором функций(FPS) но меня они не устроили. Посмотрел примеры, увидел что там через DCE, попробовал реализовать, получилось все кроме прыжка...вот жешь засада...
Может есть еще какие варианты или другие сис-мы для проверки столкновения? А вообще, может примерчик напишите именно с реализацией прыжка в FPS, пожалуйста...?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 21-05-2009 15:46
Ну так уж и быть, напишу

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 21-05-2009 18:36
Вот:
x3d_dce_fps.zip

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 21-05-2009 19:34
...спасибо вам огромное!
P.S Даже оружие прикрутили

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 21-05-2009 21:07
Все бы было хорошо...если бы не возможность многократного прыжка в воздухе,я конечно своими силами постараюсь решить эту проблему, но все же...
Решил! Изменил и добавил кое-что в Step, а именно:
if press=0 && keyboard_check_pressed(vk_space) {jump=2.2;}
DceMove(collider,0,jump-1,0,0.5);
if jump>0 {jump-=0.05; press=1}
if jump<0 {press=0;}
Правда этот код будет работать коректно только при правильном соотношении силы гравитации и высоты прыжка. Но этот способ, как сами видите, извращенный. Поэтому надеюсь, что вы предложите, что-то лучше.
Но пока приходиться довольствоваться этим вариантом реализации.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 22-05-2009 08:33
Можно еще вот так:

if keyboard_check_pressed(vk_space)
&& floor(ObjectGetPosition(collider,1)) = ObjectGetGroundHeight(collider,global.level)+10
{jump=2.2;}
DceMove(collider,0,jump-1,0, 0.5);
if jump>0 jump-=0.05;

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 22-05-2009 13:15
А еще если добавить

if keyboard_check(ord('W')) or keyboard_check(ord('S')) {a1=(a1+0.08) mod 360;} else a1=0;
ObjectSetPosition(camera,0,sin(90+a1*2)*(1.4/1.5),cos(a1)*(1.6/1.5));

то камера будет раскачиваться в такт ходьбе (т.е. не будет эффекта "инвалидной коляски").

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 22-05-2009 22:13
Спасибо, буду пробовать
Кстати, иногда получается так, что камера просто не поднимается по наклонным поверхностям или по лестнице, и я никак не могу разобрать, что за это отвечает...запутался вообщем

мастер
Группа: Участники
Сообщений: 115
Добавлено: 21-09-2009 10:18
Хороший пример. и от меня спасибо. Вот только скатывается по наклонной. это в принципе можно решит с помощь силы трения, вот только не знаю ест в DCE такая или есть ли возможность её имитировать?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 21-09-2009 19:03
Трение там есть, но оно не действует на гравитацию, которая как раз является причиной скатывания. Я пока не знаю, можно ли это как-то решить.

мастер
Группа: Участники
Сообщений: 115
Добавлено: 21-09-2009 19:52
очень странное трение. Я просто думал можно задать величину трения на наклонных поверхностях такую, что бы она полностью компенсировала ускорение свободного падения.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 21-09-2009 20:27
Не, оно тогда будет влиять только на линейное ускорение. Во всяком случае, мне так кажется. Надо попробовать.


Группа: Участники
Сообщений: 9
Добавлено: 10-01-2011 15:25
Я взял прыжок отсюда, но он не работает,все перепробовал.
Вот код.
if keyboard_check_pressed(vk_space)
&& floor(ObjectGetPosition(collider,1)) = ObjectGetGroundHeight(collider,level)
{jump=2.2;}
DceMove(collider,0,jump-1,0, 0.5);
if jump>0 jump-=0.05;


Группа: Участники
Сообщений: 9
Добавлено: 10-01-2011 17:43
Немного доработал, но прыжки бесконечные...

if canjump=1 && keyboard_check_pressed(vk_space) {jump=3.2;}
DceMove(collider,0,jump-1.5,0,0.5);
if jump>0 {jump-=0.05;canjump=0}
if ObjectGetGroundHeight(collider,level)+5{canjump=1}

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 13-01-2011 15:26
Делал давно пример шутера, посмотри - Скачать
Если уж там что-то не понятно станет, тогда спрашивай, а так сам попытайся разобраться

частый гость
Группа: Участники
Сообщений: 11
Добавлено: 21-04-2011 21:05
По поводу примера столкнулся с такой проблемой, упростил пример до невозможности, убрал гравитацию. Часто сфера к которой прикручена камера сталкиваясь с кубом начинает подниматься вместе с камерой на некоторую высоту, после чего свободно летает над кубом. Всю голову сломал, ни как не пойму что к чему...Год назад такая же фигня была при просчёте столкновений на рейкаст, теперь исключительно с DCE

Страницы: 1 2 Next>> новая тема
Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / Прыжок в FPS через DCE

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU