HLFX.Ru Forum Страницы (3): [1] 2 3 »
Показать все 32 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Несколько вопросов о Player Movement (pm_shared) (https://hlfx.ru/forum/showthread.php?threadid=4416)


Отправлено NarutoUA 27-05-2014 в 16:02:

Question Несколько вопросов о Player Movement (pm_shared)

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

Тут у меня есть несколько вопросов:
1) - pm_friction - трение с землей? тоесть, сколько юнитов еще проделает мой персонаж после того, как я отпущу кнопку вперед/вбок?
2) - pm_accelerate - движение по земле? а pm_airaccelerate в функции pm_airmove - движение по воздуху?
3) - вызов функции PM_FlyMove(); в PM_AirMove - что это?
4) pm_debug.c - что и зачем это?


Отправлено ILZM 27-05-2014 в 18:07:

1) Да, если, например, оно будет маленьким, то игрок будет скользить как по льду. Это было на одной из HL Opposing Force карт.

2) Да, оно вызывается при движении по земле. И другие аналогично.

3) PM_FlyMove() это тип движения, а PM_AirMove это типо состояние, когда игрок прыгнул. Ещё PM_FlyMove() вызывается, когда игрок плавает (PM_WaterMove()).

4) Не знаю)


Отправлено NarutoUA 27-05-2014 в 18:31:

ILZM
3) PM_AirMove, я так понял, применяется в главной функции PM_PlayerMove движение при проверке, когда тело не на земле, тоесть в воздухе, то тогда работает PM_AirAccelerate, а когда игрок на земле - PM_WalkMove и просто PM_Accelerate + PM_Friction.

Если я правильно понимаю, то этот код из PM_PlayerMove отвечает только за движения по земле, трение и движение по воздуху, и переписав это (ну и используемые функции) я получу более-менее движение как в кс/хл(без учета переменных, там ведь для каждой игры свои значения кваров), только без лестниц, воды, и хотьбы сидя:

code:
if ( pmove->onground != -1 ) { pmove->velocity[2] = 0.0; PM_Friction(); } // Make sure velocity is valid. PM_CheckVelocity(); // Are we on ground now if ( pmove->onground != -1 ) { PM_WalkMove(); } else { PM_AirMove(); // Take into account movement when in air. }


Отправлено ILZM 27-05-2014 в 18:41:

NarutoUA,да. Но не нужно забывать про просчитывание столкновений и клиентскую часть в input.cpp (может и не только).


Отправлено NarutoUA 27-05-2014 в 19:23:

В функции PM_Accelerate есть строка:

code:
accelspeed = accel * pmove->frametime * wishspeed * pmove->friction;


Меня вот интересует этот указатель pmove->friction что это?
Это указатель на эту структуру

code:
typedef struct playermove_s { ... ... float gravity; // Our current gravity and friction. float friction; ... ... }


Отправлено XaeroX 27-05-2014 в 20:18:

NarutoUA
Эта структура - параметры физики игрока, которые шарятся между сервером и клиентом в целях предиктинга.

__________________

xaerox on Vivino


Отправлено NarutoUA 28-05-2014 в 15:05:

Никак не могу разобраться в векторах.
В ф-ции PM_AddGravity () есть строка:

code:
// Add gravity incorrectly pmove->velocity[2] -= (ent_gravity * pmove->movevars->gravity * pmove->frametime );


pmove->velocity - вектор, тоесть массив из 3х чисел - x,y,z. Но вот цифра 2 - это разве не ось Z, тогда почему гравитация действует на эту ось, а не на ось Y? Или в хлсдк вектор это (x,z,y) а не (x,y,z)?


Отправлено Ku2zoff 28-05-2014 в 17:39:

0 - PITCH (наклон по вертикали вперёд-назад)
1 - YAW (поворот по горизонтали)
2 - ROLL (наклон по вертикали вправо-влево)

или

0 - x (вперёд)
1 - y (вправо)
2 - z (вверх)

В халфе ось Z вертикальная. ЕМНИП, термин такой фанатский есть, ни то "Мир по-Кармаку", ни то ещё "Что-то по-Кармаку". Именно из-за такой вот системы координат. Изначально были только X(вперёд) и Y(вправо). В дууме и вольфенштейне. А как дошло дело до первокваки (она трёхмерная), добавили вертикальную ось Z. Вот и весь секрет.
Я, кстати, до сих пор не обращаю на это внимания. Хотя, если вспомнить школьный курс геометрии, Кармак прав. Ведь плоскость, она горизонтальная. И двумерное пространство в халфе располагается правильно. В отличие от этих ваших 3д редакторов, где плоскость вертикальна.


Отправлено NarutoUA 28-05-2014 в 17:46:

Я то думаю, почему у меня персонаж ходит только влево-вправо да и прыгает как обезьяна, а тут вот оно что... А как реализована гравитация? Зависит от sv_gravity x, где х - юниты в секунду? Тоесть у меня обьект падает по такому вот закону?:

velocity.y-= sv_gravity * frametime


Отправлено Ku2zoff 28-05-2014 в 17:55:

Цитата:
NarutoUA писал:
velocity.y

Ну неправильно же. Надо velocity.z уменьшать, чтоб падал. А по velocity.y он у тебя влево двигаться будет.
Я вообще с этим не заморачивался. Как помнил, что ось Z это перпендикуляр к плоскости, так и писал код. А за плоскость брал горизонталь, параллельную земле. Соответственно, перпендикуляр вверх смотрит. Тут и гадать-то нечего, достаточно поглядеть обнуления velocity.z в pm_shared, в условиях, когда вертикальная скорость не должна учитываться.


Отправлено NarutoUA 28-05-2014 в 17:58:

Просто на движке unity , где я это пишу, ось Y это таки вверх


Отправлено fire64 28-05-2014 в 18:16:

NarutoUA, ты переносишь физику игрока из HL в Unity?

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено NarutoUA 28-05-2014 в 18:28:

fire64
Да, увидел на ютубе видео с демкой на юнити, порт физики игрока с Q3 на Юнити, вроде неплохо получилось. Решил вот свой порт сделать, только с голдсорса.


Отправлено ~ X ~ 28-05-2014 в 19:58:

Цитата:
Ku2zoff писал:
В халфе ось Z вертикальная.

Высшая математика аппрувит вертикальную ось З. Физика тоже. Кады тоже. И только автор быдлоредактора "Молочная Фигура 3Д" выпендрился и сделал У по вертикали. Возможно, школьник.
ЗЫ: А Кармаг - срамный кусок бревна, а не программер.

Цитата:
NarutoUA писал:
Просто на движке unity , где я это пишу, ось Y это таки вверх

Так, значит, не зря его здесь так нелюбят?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 28-05-2014 в 20:00:

Цитата:
~ X ~ писал:
И только автор быдлоредактора "Молочная Фигура 3Д" выпендрился и сделал У по вертикали. Возможно, школьник.

Ну ты же в курсе, что по умолчанию и в д3д, и в опенгл вертикальная ось - У? Ты же в курсе, да?..

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 18:31. Страницы (3): [1] 2 3 »
Показать все 32 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024