虚幻引擎4: Super::Tick ( DeltaTime )

3

我是 Unreal Engine 4 的新手,想从他们网站上发布的文档开始学习。然而,在编写代码方面我遇到了一些困难(我的 C++ 知识还不错)。以下是我遇到问题的代码片段:

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

我不明白这是如何工作的。我大致理解了语句,但是我不知道它是如何工作的。所以tick基本上是一个名为每个tick(帧)的函数,添加的任何其他语句都是用来编辑每一帧中演员逻辑的。这是如何工作的?第一个语句“Super :: Tick(DeltaTime);”不应该导致无限递归吗,因为没有基本(停止)情况吗? 任何帮助将不胜感激。 非常感谢

1
为什么会无限递归?它并没有调用自身,所以根本不是递归。何为“Super”? - user253751
1
Super::Tick 简单地调用父类中的 tick 函数。为了避免记住每个类的父类名称,UE4 定义了 Super,使得派生类的虚函数可以轻松调用父类版本。 - rashmatash
@rashmatash 哦,我现在明白了,非常感谢你! - Mhh
1个回答

3
这里没有递归 - 它调用的是Super::Tick,而不是它本身。 Super很可能是基类的typedef,旨在让您在所有情况下都可以调用其函数,而无需记住其实际名称。
因此,Super::Tick(DeltaTime); 调用基类中的 Tick 函数(并将 DeltaTime 作为参数传递给它)。如果您重写了一个函数,但仍希望发生“正常”的事情以及您在覆盖中编写的内容,这非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接