【问题标题】:Particle stream should be the same length regardless of emitter speed无论发射器速度如何,粒子流都应具有相同的长度
【发布时间】:2010-02-02 16:58:11
【问题描述】:

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

以下是静止船的效果:

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

我希望火焰始终保持相同的长度。这是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; }
}

提前致谢。

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

【问题讨论】:

  • 我不明白你所说的“长度一致”是什么意思,你的意思是你不希望效果有痕迹?

标签: c++ particles


【解决方案1】:

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

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


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

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

  2. 一旦粒子离开引擎,其速度/方向的任何变化 船对它没有影响。一旦粒子发射,它的速度 和方向是恒定的,直到它失败。这实际上应该 当你转动船或发生巨大变化时看起来很酷 加速。

干杯。

【讨论】:

  • @knight666:请注意,当您停止时,粒子只会……挂在那里。我认为您可能真正想要的是 Scott 建议的内容
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • setLifeVar 将为随机范围设置一些方差
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多