1 2 Next>> |
Автор | Сообщение |
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 20-05-2009 18:52 |
Снова я... Вообщем пробовал по-разному, но ничего так и не получилось. Смотрел в примерах, там высота игрока соотносится с высотой земли. Но как бы я ни старался, ничего нормально работать не хочет... уже на стену лезть стал от безысходности, пришлось обратиться к вам. Если будет не трудно, опишите по-подробнее, как можно реализовать этот самый прыжок... |
|
Gecko 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); Старый классический алгоритм. Я его даже не сам придумал, просто адаптировал. |
|
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 20-05-2009 19:39 |
Спасибо...но я так уже пробовал...игра просто виснет((( | |
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 20-05-2009 19:44 |
А занесены ли кубы в потомки для level? Обновляете ли состояние DCE функцией DceManagerStep(dce,0.1)? Не спрятаны ли кубы ObjectHide'ом? Просто это отключает их для DCE, надо вместо этого использовать невидимый материал. | |
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 21-05-2009 15:14 |
Я делал без кубов, просто создал камеру и прикрутил её к сфере. Столкновения работаю нормально.В step Функцией DceMove(cube,0,-2,0,1); сферу постоянно тянет вниз, вроде как вот она гравитация, но прыжка как такового нет...то есть нажатием клавиши игрок просто поднимется вверх, а если клавишу отпустить, то он также опускается назад. Всю голову сломал уже...[img]http://funportal.info/smiles/smile251.gif[/img]Я сначала хотел стандартным набором функций(FPS) но меня они не устроили. Посмотрел примеры, увидел что там через DCE, попробовал реализовать, получилось все кроме прыжка...вот жешь засада... Может есть еще какие варианты или другие сис-мы для проверки столкновения? А вообще, может примерчик напишите именно с реализацией прыжка в FPS, пожалуйста...[img]http://mysmiles.ru/cray-1.gif[/img]? |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 21-05-2009 15:46 |
Ну так уж и быть, напишу | |
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 21-05-2009 18:36 |
Вот: x3d_dce_fps.zip |
|
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 21-05-2009 19:34 |
...спасибо вам огромное! P.S Даже оружие прикрутили |
|
Hacker Ответственный за 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;} Правда этот код будет работать коректно только при правильном соотношении силы гравитации и высоты прыжка. Но этот способ, как сами видите, извращенный. Поэтому надеюсь, что вы предложите, что-то лучше. Но пока приходиться довольствоваться этим вариантом реализации. |
|
Gecko 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; |
|
Gecko 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)); то камера будет раскачиваться в такт ходьбе (т.е. не будет эффекта "инвалидной коляски"). |
|
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 22-05-2009 22:13 |
Спасибо, буду пробовать Кстати, иногда получается так, что камера просто не поднимается по наклонным поверхностям или по лестнице, и я никак не могу разобрать, что за это отвечает...запутался вообщем |
|
Душелов мастер Группа: Участники Сообщений: 115 |
Добавлено: 21-09-2009 10:18 |
Хороший пример. и от меня спасибо. Вот только скатывается по наклонной. это в принципе можно решит с помощь силы трения, вот только не знаю ест в DCE такая или есть ли возможность её имитировать? | |
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 21-09-2009 19:03 |
Трение там есть, но оно не действует на гравитацию, которая как раз является причиной скатывания. Я пока не знаю, можно ли это как-то решить. | |
Душелов мастер Группа: Участники Сообщений: 115 |
Добавлено: 21-09-2009 19:52 |
очень странное трение. Я просто думал можно задать величину трения на наклонных поверхностях такую, что бы она полностью компенсировала ускорение свободного падения. | |
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 21-09-2009 20:27 |
Не, оно тогда будет влиять только на линейное ускорение. Во всяком случае, мне так кажется. Надо попробовать. |
|
Satans_cry Группа: Участники Сообщений: 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; |
|
Satans_cry Группа: Участники Сообщений: 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} |
|
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 13-01-2011 15:26 |
Делал давно пример шутера, посмотри - Скачать Если уж там что-то не понятно станет, тогда спрашивай, а так сам попытайся разобраться |
|
Лёха_Ш частый гость Группа: Участники Сообщений: 11 |
Добавлено: 21-04-2011 21:05 |
По поводу примера столкнулся с такой проблемой, упростил пример до невозможности, убрал гравитацию. Часто сфера к которой прикручена камера сталкиваясь с кубом начинает подниматься вместе с камерой на некоторую высоту, после чего свободно летает над кубом. Всю голову сломал, ни как не пойму что к чему...Год назад такая же фигня была при просчёте столкновений на рейкаст, теперь исключительно с DCE | |
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 01-05-2011 10:47 |
Hacker, Срочным образом нужен твой пример! Перезалей плиз если еще остался!!! | |
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 06-05-2011 18:48 |
hard_ndm , перезалил, файл доступен по той же ссылке. |
Offtop.ru © 2003 |