2010-02-02 43 views
1

我正在爲我們的學生遊戲編寫一個粒子系統,並且遇到了一些問題。我想提高對火箭的影響,但我似乎無法弄清楚。無論發射器速度如何,粒子流應該是相同的長度

這裏的效果看起來如何在一個固定的船:

alt text

這裏是它的外觀上移動的船舶:

alt text

我想要的火焰是相同的長度一致。這裏的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; } 
} 

在此先感謝。

編輯:爲了清理一些東西,我想要效果追蹤,但是我希望追蹤的方式與發射器的速度無關。

+1

我不明白你的意思是'一致的長度',你的意思是你不希望效果有一個痕跡? – 2010-02-02 17:01:46

回答

6

根據母艦的速度,你正在使顆粒移動得更快或更慢,但它們的壽命是一個常數,你減少一個,直到你達到零,是正確的?

你可能想要做的是將壽命設置爲距離值,而不是某個數量的刻度。然後,從生命週期中減去船的速度(或者你在每個滴答中添加到每個粒子上的任何東西)。當生命變得消極時,殺死粒子。


我認爲這是你想要的......但如果你進行兩處更改你的算法可能是冷卻器(更逼真):

  1. 當前的行爲尾部(長)是正確的如果出自你的發動機的顆粒 速度是基於推力(加速度 而不僅僅是速度)。船隻一旦離開發動機,船隻在速度/方向上的任何變化都不會對其產生影響。一旦粒子發射出來,它的速度爲 ,並且方向是恆定的,直到它消失。這實際上應該是 ,當你轉向船時,或者急劇改變加速度時,它看起來很酷。

乾杯。

+2

@ knight666:請注意,當您停止時,粒子將會......掛在那裏。我認爲你可能*真正*想要的是斯科特建議的 – 2010-02-03 15:46:30

0

如果你想讓它有自己的長度一致,那麼你需要將父母的速度除以父母的速度來標準化。很顯然,如果父母坐着不動,這將不起作用,因此在這種情況下需要某種「閒置」狀態(隨機圓錐形分佈或任何)。

此外,只獲取構造函數中的速度,並在滴答期間繼續使用它。

0

系統中是否有任何隨機變量?每個發射器的粒子數量,粒子壽命等?這會導致路徑的長度變化。

+0

setLifeVar將爲隨機範圍設置一些方差 – quantumpotato 2011-04-27 14:58:29