1

我正在为我们的学生游戏编写粒子系统,但遇到了一些障碍。我想提高对飞船火箭的影响,但我似乎不知道如何做。

以下是静止船只上的效果:

替代文字

这是它在移动的船上的样子:

替代文字

我希望火焰始终保持相同的长度。这是ParticleTick功能:

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; }
}

提前致谢。

编辑:为了澄清一点,我希望效果跟踪,但无论发射器的速度如何,我都希望它以相同的方式跟踪。

4

3 回答 3

6

您正在根据母船的速度使粒子移动得更快或更慢,但是它们的寿命是一个常数,您将其减一直到达到零,对吗?

您可能想要做的是将生命周期设置为距离值,而不是一些滴答数。然后,从生命周期中减去飞船的速度(或者你在每个滴答声中添加到每个粒子的任何东西)。当寿命变为负数时,杀死粒子。


我认为这就是您想要的...但是如果您对算法进行两项更改,它可能会更酷(也更现实):

  1. 如果从引擎中出来的粒子速度是基于推力(加速度而不仅仅是速度) ,那么当前的行为(尾巴的长度)是正确的。

  2. 一旦粒子离开引擎,船的速度/方向的任何变化都不会对其产生影响。一旦粒子发射出去,它的速度和方向是恒定的,直到它消失。当您转动船或大幅改变加速度时,这实际上应该看起来很酷。

干杯。

于 2010-02-02T22:48:26.417 回答
0

如果您希望它始终具有自己的长度,那么您需要通过将其除以父母的速度来标准化父母的速度。显然,如果父级静止不动,则这将不起作用,因此在这种情况下您将需要粒子的某种“空闲”状态(随机圆锥分布或诸如此类)。

此外,仅在构造函数中获取速度,并在滴答声中继续使用它。

于 2010-02-02T17:08:39.320 回答
0

系统中有随机变量吗?每个发射器的粒子数,粒子寿命等?这将导致路径的长度不同。

于 2010-02-02T17:19:05.333 回答