2016-12-02 105 views
0

我已經開始在虛幻引擎4中工作,並在他們的網站上用C++打開了最基本的教程。因此,這是他們提供Movement EquationDeltaHeight =(Sin(RunningTime + DeltaTime) - Sin(RunningTime));

void AFloatingActor::Tick(float DeltaTime) 
{ 
    Super::Tick(DeltaTime); 

    FVector NewLocation = GetActorLocation(); 
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime)); 
    NewLocation.Z += DeltaHeight * 20.0f;  //Scale our height by a factor of 20 
    RunningTime += DeltaTime; 
    SetActorLocation(NewLocation); 
} 

的代碼,這是它應該做的解釋: 我們剛剛寫會導致FloatingActors鮑勃上下順利的代碼,用我們所創建的RunningTime變量隨着時間的推移跟蹤我們的運動。

當你編譯它時,它會這樣做,但它並沒有告訴我任何有關它的工作原理或原理。那個錯誤我是作爲標題的事情說了運動方程:

DeltaHeight = SIN(RunningTime +的DeltaTime) - 罪(RunningTime)

如果有人可以解釋這對我來說將不勝感激。我所要求的將是這個方程背後的數學/物理解釋還是解釋這個方程從何而來的解釋。爲什麼會這樣。

回答

0

該功能控制角色的移動(具體高度),以便通過sine wave隨着時間的推移控制移動量。也就是說,在時間0,它開始向上移動相對較快,然後放慢向上移動,直到它停止向上移動,然後開始向下移動,向下加速,最終減速並再次向上移動。它繼續週期性地以這種方式上下移動。

所以,這個函數的工作原理是它被週期性地調用,然後在這個調用和最後一個之間的時間變化是DeltaTime。最後一次被稱爲RunningTime。因此,計算新的位置:

FMath::Sin(RunningTime + DeltaTime) 

與舊位置:

FMath::Sin(RunningTime) 

然後通過採取差別計算位置變化

float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime)); 
+0

我明白了什麼是計算我不明白的是爲什麼我們要使用特定的方程?例如,我可以做的是: Float DeltaHeight =(FMath :: Sqrt(RunningTime + DeltaTime) - FMath :: Sqrt(RunningTime)); 那麼,爲什麼我們使用這個特定的方程? 例如,爲什麼新的位置FMath :: Sin(RunningTime + DeltaTime)? – Saizaku

+0

是的,這是新的位置,這個函數試圖確定的是位置的變化。這種方式在起點上是必要的。 – zdan