Поток частиц должен быть одинаковой длины независимо от скорости излучателя - PullRequest
1 голос
/ 02 февраля 2010

Я пишу систему частиц для нашей студенческой игры, и я наткнулся на небольшую загадку. Я хочу улучшить эффект на ракетах кораблей, но не могу понять, как.

Вот как выглядит эффект на стационарном корабле:

alt text

А вот как это выглядит на движущемся корабле:

alt text

Я хочу, чтобы пламя было одинаковой длины. Вот функция Particle Tick:

void Particle::Tick(float a_DT)
{
    // temporarily turned off to see the effect of the rest of the code more clearly
//m_Pos += m_Vel;

    if (m_Owner) { m_Pos += m_Owner->GetParentSpeed(); }

    m_Life -= 1;

    if (m_Life <= 0) { m_Alive = false; }
}

Заранее спасибо.

РЕДАКТИРОВАТЬ: Чтобы немного прояснить ситуацию, я хочу, чтобы эффект следовал, но я хочу, чтобы он следовал одинаково независимо от скорости излучателя.

Ответы [ 3 ]

6 голосов
/ 03 февраля 2010

Вы заставляете частицы двигаться быстрее или медленнее в зависимости от скорости родительского корабля, но их время жизни - это некоторая постоянная, которую вы уменьшаете на единицу, пока не достигнете нуля, верно?

Что вы, вероятно, хотите сделать, это установить для времени жизни значение расстояния, а не какое-нибудь количество тиков . Затем вычтите скорость корабля (или что бы вы ни добавляли к каждой частице на каждом такте) из времени жизни. Когда время жизни становится отрицательным, убейте частицу.


Я думаю, это то, что вы хотите ... но это может быть круче (и более реалистично), если вы сделаете два изменения в своем алгоритме:

  1. Текущее поведение (длина хвоста) является правильным , если частица скорость, выходящая из ваших двигателей, основана на тяге (ускорение а не просто скорость).

  2. Как только частица покидает двигатель, любые изменения скорости / направления Корабль не влияет на это. Как только частица испускается, это скорость и направление постоянны, пока не кончится. Это должно на самом деле выглядят довольно круто, когда вы поворачиваете корабль или резко меняете ускорение.

Приветствие.

0 голосов
/ 02 февраля 2010

Есть ли в системе случайные величины? Количество частиц на излучатель, срок службы частиц и т. Д.? Это приведет к тому, что трассы будут разной длины.

0 голосов
/ 02 февраля 2010

Если вы хотите, чтобы он имел свою собственную длину последовательно, вам нужно нормализовать скорость родителя, разделив ее на скорость родителя.Очевидно, что это не сработает, если родитель сидит на месте, поэтому вам понадобится какое-то состояние «холостого хода» для частиц в этом случае (случайное коническое распределение или еще много чего).

Кроме того, скорость приобретается только вконструктор, и продолжайте использовать его во время тиков.

...