Показать все 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]
__________________
__________________
Почему игрок двигается со скоростью 250 юнитов в секунду? Там ведь идет ускорение игрока в упор до определенной скорости (вроде до sv_maxspeed 320). Но почему-то на самом деле скорость 250, а не 320.
Ну так трение же.
__________________
Подниму относительно старую тему, но у меня опять есть парочка вопросов.
1) Что делает функция PM_PlayerTrace? Вот пример:
trace = pmove->M_PlayerTrace (pmove->origin, end, PM_NORMAL, -1 );
2) Функция PM_ClipVelocity, которая вызывается из другой функции - PM_FlyMove нужна чтобы регулировать скорость игрока когда он двигается по диагонали к стене?
Hey, anybody tut?
Привет, натуро.
Не отвечает никто потому что есть море способов это узнать:
0) посмотреть, где, кто и зачем её использует
1) интернеты
2) исходники ксаша
3) а ты сразу сюда - форум
ЗЫ: я наизусть эти функции не помню, так что, могу только предполагать. Но предполагать каждый может, так что, это не надёжно.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
~X~, MOTD: интернеты кончились, ухожу в реал.
Вау! У тебя появилась девушка???
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Появление девушки у кого то на этом форуме вызывает удивление))
__________________
ㅤ
Да, именно так
Ну и обычно (исходя из собственного опыта общения с людьми), такие пафосные фразы выскакивают чуть реже, чем всегда, именно при появлении очередной подруги....
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
О, я тогда и свой вопрос задам.
Делал для Кибермакса кое какую, корявую заморочку по распрыжке, скопипастил с ку3 код и подправил на свое усмотрение. Врезаться в лесенки игрок почти перестал (то есть при высоте stepsize и ударе в вертикальную плоскость он "зашагивает" на неё), но появился косяк небольшой. Игрок движется в направлении взгляда, то есть если прицел опустить в пол и бежать вперед, он будет как баран рогом упираться в землю и стоять на месте. Подскажет кто нибудь, как при этом движение вперед а не в землю осуществляется?
А то Кибермакс я гляжу исходники потерял и ему горестно, а они у меня есть, но нужно подправить. Поможем члену партии. =)
__________________
Такие дела...
FaL_DissecTor
Надо питч у вьюанглес клампить не по (-90, 90), а по (-89.9,89.9).
Тогда полученный из них v_forward можно будет спроектировать на плоскость гравитации (тупо занулив z), нормализовать и получить v_forward для движения вперёд.
__________________
Ммм, я кажется понимаю где собака зарыта, я похоже бездумно все обнуления z потер (дабл джамп), спасибо за объяснение.
__________________
Такие дела...
Поднимаю старую тему.
При нажатии вперёд игрок движется со скоростью 320 ups (maxspeed 320 ограничивает forwardspeed 400)
При нажатии шифта: forwardspeed 400 * мувспидкий = 120 юнитов в сек.
При нажатии контрола: maxspeed 320 * 0.333 = 106.5 ups
Почему при нажатии контрола и шифта скорость ~10.5 юнитов в секунду?
__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
перехожу на другой двиг
__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
перехожу на другой двиг
Временная зона GMT. Текущее время 00:08. | Показать все 32 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024