Unreal Engine 4: Super :: Tick (DeltaTime)

Итак, я новичок в 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);
}

Я не понимаю, как это работает. Я в значительной степени понимаю утверждения и все такое, но не понимаю, как это работает. Таким образом, тик - это функция, называемая каждый тик (кадр), а любые другие добавленные операторы предназначены для редактирования логики актера в каждом кадре. Как это работает? Не следует ли первый оператор "Super :: Tick (DeltaTime);" вызвать бесконечную рекурсию, поскольку нет базового (останавливающего) случая? Любая помощь будет оценена. Большое спасибо


person Mhh    schedule 24.04.2015    source источник
comment
Почему это будет бесконечная рекурсия? Он не вызывает себя, поэтому он вообще не рекурсивен. Что такое Super?   -  person user253751    schedule 24.04.2015
comment
Super::Tick просто вызывает галочку в родительском классе. Вместо того, чтобы запоминать, как называется каждый родительский класс, UE4 определяет Super, поэтому виртуальные функции производных классов могут легко вызывать родительскую версию.   -  person rashmatash    schedule 24.04.2015
comment
@rashmatash Ооо, теперь я понял, спасибо вам огромное!   -  person Mhh    schedule 24.04.2015


Ответы (1)


Здесь нет рекурсии - он вызывает Super::Tick, а не себя.

Super, скорее всего, является typedef базового класса, предназначенным для того, чтобы вы могли вызывать его функции, не запоминая его фактическое имя во всех ситуациях.

Итак, Super::Tick(DeltaTime); вызывает функцию Tick в базовом классе (и передает ее DeltaTime в качестве аргумента). Это полезно, если вы переопределяете функцию, но все же хотите, чтобы выполнялись «нормальные» вещи, а также то, что вы написали в своем переопределении.

person user253751    schedule 24.04.2015