{
// Мне нужен тутор по созданию ефекта разброса пуль ну как в контре -
када сидиш точно стреляет , чем больше двигаешся тем больше разброс при стрельбе . Можно еще и про отдачу .
}
Я начал с этого как раз таки. Но наверное из-за недостаточности знаний о том как там все действует и т.д.
Кароче говоря сначала то что я заметил в коде некоторых игр.
КС - Идут панчи, довольно просто - вверх, после какого-то момента несколько - из стороны в сторону. Сами же пули летят сами по себе, не похоже на разброс, такое ощущение что им уже описан путь с определенной вероятностью разброса. К примеру в той же параное - разброс делается чисто панчами+ разброс, и это не очень удобно с точки игры, слишком неудобно управлять таким разбросом. В кс же пули идут скорее всего по другому отдельно расчитанному вектору разброса, думаю там своя собственная функция разброса отличная от ХЛ-овской FireBulletPlayer (вроде).
А вот в сталкере к примеру разброс постоянен, изменяется модификаторами в режиме приседания, бега, прыжка. И панч идет простой - вверх (притом не возвращается). Такой разброс мне кажется сделать куда проще.
Что я попробывал сделать, но при этом кое какие баги есть (расхождение клиента и сервера скорее всего, пули летят в одном направлении, а декали рисуются в другом месте, где-то упустил вектор трассы который рисует декали).
Я сделал две функции довольно примитивного разброса.
void CAK47::SpreadItUp( void )
{
if (flSpreadInd >= 0.1) flSpreadInd = 0.1;
else flSpreadInd=flSpreadInd+0.02;
SpreadItDown();
}
Соответсвенно в функции атаки
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ки перебрасываем на семерку и повторяем. При уменьшении разброса идем к началу массива.
Ну ещё приписать какой нибудь "модификатор движения" переменный коэфицент который менялся бы со сменой скорости и положения тела, а сам вектор из таблицы умножался бы на этот коэфицент(тем самым уменьшая разброс).
Ещё я не знаю как делать чтобы панч мог накладываться на предыдущий (в оригинале это только один раз происходит, то есть один скачек экрана, а следующий идет от центра опять же на то же расстояние). У Бузера в параное был этот кода, но там очень многобукаф +).
з.ы. У меня видюха погибла веселой смертью, и читать что либо, не то что код писать - ужасное действие, поэтому пока ниче не сделал. Ещё вопрос где согласование клиента с сервером на эту тему, отчего декали рисуются не там где надо.
FaL_DissecTor писал: (расхождение клиента и сервера скорее всего, пули летят в одном направлении, а декали рисуются в другом месте, где-то упустил вектор трассы который рисует декали
Просто стандартные векторы на клиенте задефинены, а вабще первый выстрел всегда в цель это как то даже бесит.
Такое оущущение что эта функция не повторяется, слямзил из кода рпг, так что не уверен что она верна для данного случая. Как сделать правильно? Я в перезарядке задал принудительное обнуление разброса. Сейчас разброс увеличивается но не сужается, только при перезарядке.
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 к примеру, а зомбей которые находятся слева и справа(хорошенько так справа) убивает.
FaL_DissecTor писал: Как бы объяснить, стреляю я значит с пушки, трассы и декали рисуются в центре как у мп5 к примеру, а зомбей которые находятся слева и справа(хорошенько так справа) убивает.
ГЫ у стандартных векторов еще в плеере идет вычисление...
XaeroX
эм косяк. Спасибо что указал, только я так и не пойму как правильно проверять на это условие (сам код). Это у меня развлекаловка, для себя, я не проггер, до всего приходится доходить самому или откуда-то тырить, если догадатся не получается. =)
ив я действительно не знаю отчего физ. полет пули отличается от графического. Физ. вроде нормально работает, а вот граф. только увеличивается.