【问题标题】:Unreal Engine 4: Super::Tick ( DeltaTime )虚幻引擎 4:Super::Tick ( DeltaTime )
【发布时间】:2015-07-03 03:45:44
【问题描述】:

所以我是 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(帧)的函数,添加的任何其他语句都是编辑每帧actor的逻辑。这是如何运作的?第一条语句不应该是“Super::Tick (DeltaTime);”吗?由于没有基本(停止)情况而导致无限递归? 任何帮助,将不胜感激。 非常感谢

【问题讨论】:

  • 为什么会是无限递归?它没有调用自己,所以它根本不是递归的。 Super 是什么?
  • Super::Tick 只是调用父类中的滴答声。 UE4 定义了Super,而不是记住每个类的父类被调用的内容,因此派生类的虚函数可以轻松调用父版本。
  • @rashmatash 哦,我现在明白了,非常感谢!

标签: c++ unreal-engine4


【解决方案1】:

这里没有递归——它调用的是Super::Tick,而不是它自己。

Super 很可能是基类的 typedef,旨在让您可以在所有情况下调用其函数而无需记住其实际名称。

所以Super::Tick(DeltaTime); 调用基类中的Tick 函数(并将DeltaTime 作为参数传递)。如果您覆盖一个函数,但仍希望“正常”的事情发生以及您在覆盖中编写的内容,这将很有用。

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 2015-02-04
    • 1970-01-01
    • 2015-01-13
    • 2019-12-09
    • 2020-03-26
    • 2023-03-28
    • 2014-04-26
    • 2015-10-12
    相关资源
    最近更新 更多