![]() |
Страницы (2): [1] 2 » Показать все 21 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Разброс пуль (https://hlfx.ru/forum/showthread.php?threadid=1601)
Разброс пуль
{
// Мне нужен тутор по созданию ефекта разброса пуль ну как в контре -
када сидиш точно стреляет , чем больше двигаешся тем больше разброс при стрельбе . Можно еще и про отдачу .
}
Что ты уже сделал в этом направлении? Какие идеи, наработки? Исходники поковырял?
__________________
мне над для ознакомления
Ты сам собираешься изучать СДК и разбираться с нашей помощью, или тебя интересует исключительно готовое?
__________________
нет , меня интерисует сам код
а... ну я такой код не встречал и сам не писал.
__________________
Я начал с этого как раз таки. Но наверное из-за недостаточности знаний о том как там все действует и т.д.
Кароче говоря сначала то что я заметил в коде некоторых игр.
КС - Идут панчи, довольно просто - вверх, после какого-то момента несколько - из стороны в сторону. Сами же пули летят сами по себе, не похоже на разброс, такое ощущение что им уже описан путь с определенной вероятностью разброса. К примеру в той же параное - разброс делается чисто панчами+ разброс, и это не очень удобно с точки игры, слишком неудобно управлять таким разбросом. В кс же пули идут скорее всего по другому отдельно расчитанному вектору разброса, думаю там своя собственная функция разброса отличная от ХЛ-овской FireBulletPlayer (вроде).
А вот в сталкере к примеру разброс постоянен, изменяется модификаторами в режиме приседания, бега, прыжка. И панч идет простой - вверх (притом не возвращается). Такой разброс мне кажется сделать куда проще.
Что я попробывал сделать, но при этом кое какие баги есть (расхождение клиента и сервера скорее всего, пули летят в одном направлении, а декали рисуются в другом месте, где-то упустил вектор трассы который рисует декали).
Я сделал две функции довольно примитивного разброса.
void CAK47::SpreadItUp( void )
{
if (flSpreadInd >= 0.1) flSpreadInd = 0.1;
else flSpreadInd=flSpreadInd+0.02;
SpreadItDown();
}
void CAK47::SpreadItDown( void )
{
if (flSpreadInd==0.008)
{
pev->nextthink = gpGlobals->time + 5.0;
}
if ((0.008>=flSpreadInd) || (0.008 > flSpreadInd-0.1)) flSpreadInd=0.008;
else flSpreadInd=flSpreadInd-0.005;
SetThink( SpreadItDown );
pev->nextthink = gpGlobals->time + 0.2;
}
Соответсвенно в функции атаки
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, Vector( flSpreadInd, flSpreadInd, flSpreadInd ) , 8192, BULLET_PLAYER_762MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed );
и в конце атаки SpreadItUp(); //spread increases
(какой тег для кода С++?)
Вроде работало, хотя уже и не помню сколько раз менял это дело, где-то точно работало, пробывал.
Есть идея создать немного другую функцию. Точнее изменить существующую.
Кароче сделать массив из векторов описанных заранее (чтобы разброс был более предсказуемым), и изменить чуть чуть функцию FireBulletPlayer - добавть туда параметр "сила разброса" (то есть гду нужно увеличивать рандомность разброса, или же использовать это в качестве минимальной планки отклонения, чтобы пули не лезли туда куда не надо) .
Ну и значит, при выстреле вызываем функцию, она по заданной схеме выбирает вектор и возвращает его. И считается переменная какая-либо. Допустим таблица из 10 векторов, 3 из них должны повторятся, с 10ки перебрасываем на семерку и повторяем. При уменьшении разброса идем к началу массива.
Ну ещё приписать какой нибудь "модификатор движения" переменный коэфицент который менялся бы со сменой скорости и положения тела, а сам вектор из таблицы умножался бы на этот коэфицент(тем самым уменьшая разброс).
Ещё я не знаю как делать чтобы панч мог накладываться на предыдущий (в оригинале это только один раз происходит, то есть один скачек экрана, а следующий идет от центра опять же на то же расстояние). У Бузера в параное был этот кода, но там очень многобукаф +).
з.ы. У меня видюха погибла веселой смертью, и читать что либо, не то что код писать - ужасное действие, поэтому пока ниче не сделал. Ещё вопрос где согласование клиента с сервером на эту тему, отчего декали рисуются не там где надо.
__________________
Такие дела...
ага , ясно
што ето дело мутное..
У меня появились вопросы.
SetThink( SpreadItDown );
pev->nextthink = gpGlobals->time + 0.2;
Такое оущущение что эта функция не повторяется, слямзил из кода рпг, так что не уверен что она верна для данного случая. Как сделать правильно? Я в перезарядке задал принудительное обнуление разброса. Сейчас разброс увеличивается но не сужается, только при перезарядке.
Vector( flSpreadInd, flSpreadInd, flSpreadInd ) - вот тут у меня вопрос. Это вектор и три координаты его x,y,z как я понял. Начну с того что когда я ставил множитель для каждой координаты то наблюдал странные эффекты. Точно не готов сказать что это 100% верно но наблюдал такие вещи.
первая отвечает не за верх-низ, вторая за лево-право, за что отвечает третья? Она влияет на разброс, притом что разброс серьезно меняется когда она равна 0.0 и 1.0.
следующий.
написал такую дребедень
//*******
if (IN_JUMP) PosMod=10.0;
else if (IN_RUN) PosMod=1.5;
else if (IN_DUCK) PosMod=0.1;
else PosMod=1.0;
//*******
Как поняли PosMod это float переменная - коэфицент положения, незнаю насколько верно, но вроде не хочет работать =). Взял тоже из бошки.
DefilerUnit
Как бы объяснить, стреляю я значит с пушки, трассы и декали рисуются в центре как у мп5 к примеру, а зомбей которые находятся слева и справа(хорошенько так справа) убивает.
__________________
Такие дела...
__________________
XaeroX
эм косяк. Спасибо что указал, только я так и не пойму как правильно проверять на это условие (сам код). Это у меня развлекаловка, для себя, я не проггер, до всего приходится доходить самому или откуда-то тырить, если догадатся не получается. =)
ив я действительно не знаю отчего физ. полет пули отличается от графического. Физ. вроде нормально работает, а вот граф. только увеличивается.
__________________
Такие дела...
Временная зона GMT. Текущее время 20:30. | Страницы (2): [1] 2 » Показать все 21 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024