Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 05.03.2007, 14:56   #1
X-Ranger
AnyKey`щик
 
Регистрация: 18.10.2006
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Реализация игрока в FPS

Главный персонаж в FPS должен бегать, прыгать, приседать. Я реализовывал его следующим образом:

Пивот у пола (Pvt1) связанный с ним пивот в районе головы (Pvt2) и камера в районе головы:

Global Pvt1 = CreatePivot()
Global Pvt2 = CreatePivot(Pvt1)
Global Cam = CreateCamera(Pvt2)
PositionEntity Pvt1 0, 50, 0
PositionEntity Pvt2, 0, 70, 0
PositionEntity Cam, 0, 50, 0

Для перемещении игрока двигаю Pvt1
Для вращения головы вращаю камеру
Для определения возможности прыжка проверяю наличие колиизии Pvt1 с комнатой
При приседании опускаю Pvt2
При возникновении коллизии Pvt2 с комнатой (чтобы башка не съезжала при ударении в косяк например) перемещаю Pvt1 след. образом:

EntityParent Pvt2, 0
PositionEntity Pvt1, EntityX(Pvt2, True), EntityY(Pvt1, True), EntityZ(Pvt2, True), TrueEntity
Parent Pvt2, Pvt1

Наблюдается следующий артефакт - когда стоишь рядом со стеной то прыгать можно постоянно, т.к. имеется коллизия Pvt1 со стеной (которая также как и пол является частью комнаты)

Для устранения добавлял еще один пивот у пола Pvt3 - меньшего радиуса и для определения возможности прыжка проверяю наличие колиизии Pvt3 с комнатой.

Из-за меньшего радиуса он соприкасается только с полом а не со стеной.

В целом такая реализация срабатывает, но иногда наблюдается косяки. ИМХО все как то усложнено.Полагаю что я во многом перемудрил, вот и хотел узнать как подобное реализуют другие.
(Offline)
 
Ответить с цитированием
Старый 05.03.2007, 15:33   #2
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
Re: Реализация игрока в FPS

мм а если это фпс зачем так мудрить просто камеру опускаешь при приседание, поднимаеш при прыжке
а игрок бокс или сфера за камерой
но ето мое мнение я так и делаю
(Offline)
 
Ответить с цитированием
Старый 05.03.2007, 16:08   #3
X-Ranger
AnyKey`щик
 
Регистрация: 18.10.2006
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация игрока в FPS

"опускаешь при приседание"

При приседании надо еще уменьшать высоту коллизии.


"поднимаеш при прыжке"

А как он перепрыгивать препятствие будет если только камеру поднимать

"а игрок бокс или сфера за камерой"

Все равно для просчета коллизий игрок будет сферой, но опять же как определять момент когда он может прыгнуть. К тому же если делать для коллизии высоту равную высоте игрока, то тогда этот игрок будет пешком на столы взбираться, потому что радиус большой получится
(Offline)
 
Ответить с цитированием
Старый 05.03.2007, 17:28   #4
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Реализация игрока в FPS

Ничего подобного, если ты делаеш фпс, тебе нужин игрок высотой-4, и ты делаеш EntityRadius Игрок,4 то у тебя получается большая сфера
Тебе поможет такой вариант EntityRadius Игрок,1,4
PS/ что именно в крации тебе непонятно(аспекты)
(Offline)
 
Ответить с цитированием
Старый 05.03.2007, 22:07   #5
X-Ranger
AnyKey`щик
 
Регистрация: 18.10.2006
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация игрока в FPS

Сообщение от vlad
Ничего подобного, если ты делаеш фпс, тебе нужин игрок высотой-4, и ты делаеш EntityRadius Игрок,4 то у тебя получается большая сфера
Тебе поможет такой вариант EntityRadius Игрок,1,4
Хочешь сказать эллипс а не сфера.

Сообщение от vlad
PS/ что именно в крации тебе непонятно(аспекты)
Например как при такой реализации (камера и 1 пивот) определить момент когда игрок может прыгать, а когда нет, учитывая что пол и стены принадлежат одному объекту?
(Offline)
 
Ответить с цитированием
Старый 05.03.2007, 22:36   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Реализация игрока в FPS

Я реализовал физ поведение перса как в HL2, там у меня меэшь, с коллизией элипсоидной ( EntityRadius Mesh,.5,1.7 ). 2 пивота, у ног и чуть ниже самого верха элипсоида, припивочены к Мэшу. И ещё 2 пивота, при коллизии вычесляется самая нижняя точка коллизии и ставится 1 из пивотов туда, и так-же со вторым пивотом, затем проверка на дистанцию, если у ног приколлизии дистанция меньше .3, то перс стои, ежели не так, то другие варрианты. Насчёт головы, это если перс ударяется. Мэшь двигается исключительно по Yaw, а камера припивочена к верхнему пивоту и протиться вместе с ним, только ещё и по Pitch от мышки. Далее при примедании изменяется радиус элипсоида, и двигаются 2 пивота ног и головы, и при вставании обратно. Коллизия от патронов и всякого, осуществляется на Мэшь (Модель перса, которая тоже анимируется), это для реалистичности, притом при приседании, всё будет просто - анимация.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RlexGm (26.06.2010)
Старый 06.03.2007, 01:51   #7
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Реализация игрока в FPS

=-O.
clmap=0
for i=1 to countcollisions(player)
if map=collisionentity(player,i) then clmap=i
next
if clmap<>0 then .................................
CollisionY(player,clmap)-EntityY(player,1) - угадайте что.
(Offline)
 
Ответить с цитированием
Старый 06.03.2007, 02:09   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Реализация игрока в FPS

Коллизий может быть в один моммент не 1. Тут нужно вычеслить самую низкую и самую высшую.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос: Препятствия на пути игрока Unodeya 3D-программирование 4 04.06.2009 19:26
Посоветоваться (движение игрока) Fant 3D-программирование 6 18.03.2007 10:52
Передвижение игрока Fant 3D-программирование 27 09.03.2007 21:29
замучать игрока до скону jimon Болтовня 0 17.09.2006 12:47
Плавное перемещение игрока Fant 3D-программирование 4 18.04.2006 22:48


Часовой пояс GMT +4, время: 03:00.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com