Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием