2010-02-02 2 views
1

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

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

alt text

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

alt text

Я хочу пламя, чтобы быть таким же длина последовательно. Вот Particle «s 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; } 
} 

Спасибо заранее.

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

+1

Я не понимаю, что вы подразумеваете под «одинаковой длиной последовательно», вы имеете в виду, что вы не хотите, чтобы у эффекта был след? –

ответ

6

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

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


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

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

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

Cheers.

+2

@ knight666: Обратите внимание, что когда вы остановите частицы, просто ... повесьте там. Я думаю, что вы, вероятно, действительно хотите, это то, что предложил Скотт –

0

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

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

0

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

+0

setLifeVar установит некоторую дисперсию для случайного диапазона – quantumpotato

Смежные вопросы