Страницы (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)
Несколько вопросов о 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 - что и зачем это?
1) Да, если, например, оно будет маленьким, то игрок будет скользить как по льду. Это было на одной из HL Opposing Force карт.
2) Да, оно вызывается при движении по земле. И другие аналогично.
3) PM_FlyMove() это тип движения, а PM_AirMove это типо состояние, когда игрок прыгнул. Ещё PM_FlyMove() вызывается, когда игрок плавает (PM_WaterMove()).
4) Не знаю)
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. }
NarutoUA,да. Но не нужно забывать про просчитывание столкновений и клиентскую часть в input.cpp (может и не только).
В функции PM_Accelerate есть строка:
code:
accelspeed = accel * pmove->frametime * wishspeed * pmove->friction;
code:
typedef struct playermove_s { ... ... float gravity; // Our current gravity and friction. float friction; ... ... }
NarutoUA
Эта структура - параметры физики игрока, которые шарятся между сервером и клиентом в целях предиктинга.
__________________
Никак не могу разобраться в векторах.
В ф-ции PM_AddGravity () есть строка:
code:
// Add gravity incorrectly pmove->velocity[2] -= (ent_gravity * pmove->movevars->gravity * pmove->frametime );
0 - PITCH (наклон по вертикали вперёд-назад)
1 - YAW (поворот по горизонтали)
2 - ROLL (наклон по вертикали вправо-влево)
или
0 - x (вперёд)
1 - y (вправо)
2 - z (вверх)
В халфе ось Z вертикальная. ЕМНИП, термин такой фанатский есть, ни то "Мир по-Кармаку", ни то ещё "Что-то по-Кармаку". Именно из-за такой вот системы координат. Изначально были только X(вперёд) и Y(вправо). В дууме и вольфенштейне. А как дошло дело до первокваки (она трёхмерная), добавили вертикальную ось Z. Вот и весь секрет.
Я, кстати, до сих пор не обращаю на это внимания. Хотя, если вспомнить школьный курс геометрии, Кармак прав. Ведь плоскость, она горизонтальная. И двумерное пространство в халфе располагается правильно. В отличие от этих ваших 3д редакторов, где плоскость вертикальна.
Я то думаю, почему у меня персонаж ходит только влево-вправо да и прыгает как обезьяна, а тут вот оно что... А как реализована гравитация? Зависит от sv_gravity x, где х - юниты в секунду? Тоесть у меня обьект падает по такому вот закону?:
velocity.y-= sv_gravity * frametime
Просто на движке unity , где я это пишу, ось Y это таки вверх
NarutoUA, ты переносишь физику игрока из HL в Unity?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64
Да, увидел на ютубе видео с демкой на юнити, порт физики игрока с Q3 на Юнити, вроде неплохо получилось. Решил вот свой порт сделать, только с голдсорса.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
__________________
Временная зона GMT. Текущее время 11:03. | Страницы (3): [1] 2 3 » Показать все 32 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024