在虚幻引擎C ++中设置计时器

时间:2017-06-12 05:54:01

标签: c++ timer unreal-engine4

我在虚幻引擎4中创建计时器时遇到问题。问题出在GetWorldTimerManager中。当我在此调用set timer时,我得到一个E0070不完整类型错误。通常这意味着我没有包含某些内容

void ACubeFarmBlock::HandleClicked()
{
    if (!bIsPlanted)
    {
        bIsPlanted = true;

        // Change material
        BlockMesh->SetMaterial(0, OrangeMaterial);

        // Determine when to harvest
        GetWorldTimerManager().SetTimer(HarvestTimerHandle, &ACubeFarmBlock::Harvest, HarvestTime,false);
    }
}

HarvestTimerHandle在标头中定义。 以下是包含列表。 MyActor.h包含一个定义GetWorldTimerManager的方法,所以我认为我已经包含了所有内容。值得注意的是,当我在线查看计时器功能时,我发现了几个站点,其中这个set timer方法包含一个插入在HarvestTimerHandle参数和& ACubeFormBlock :: Harvest参数之间的参数。包括这个不会让我的错误消失。

#include "CubeFarmBlock.h"
#include "CubeFarmBlockGrid.h"
#include "UObject/ConstructorHelpers.h"
#include "Components/StaticMeshComponent.h"
#include "Engine/StaticMesh.h"
#include "Materials/MaterialInstance.h"
#include "MyActor.h"

错误:

  

.. \ CubeFarmBlock.cpp(76):注意:请参阅函数模板实例化的引用       ' TFunction :: TFunction(FunctorType&&)'正在编译1>       用1>               [1> FunctorType = void(__ cdecl ACubeFarmBlock :: *)(float)1> ]

     

严重级代码说明项目文件行抑制状态错误(活动)
      E0070不完整类型不允许CubeFarm .. \ CubeFarmBlock.cpp 78严重性
      代码说明项目文件行抑制状态错误(有效)E0070
      不完整类型不允许CubeFarm       .. \ CubeFarmBlock.cpp 78

2 个答案:

答案 0 :(得分:1)

在头文件中创建一个处理程序FTimerHandle InputTimeHandle;

然后在你的cpp文件中

GetWorld() - > GetTimerManager()。SetTimer(InputTimeHandle,this,& AMyPlayerController :: GetInputTimer,1,true,0.5f);

您只缺少参数

答案 1 :(得分:-1)

好的,所以对于警告,我从未使用过UE4,但是......

此错误表示您正在尝试将成员函数绑定到TFunction:

decoder

成员函数需要一个Object指向..我认为你缺少'this'参数。如果没有查找,我认为您需要:

  • 'TFunction::TFunction(FunctorType &&)' being compiled 1> with 1> [ 1> FunctorType=void (__cdecl ACubeFarmBlock::* )(float) 1> ] 绑定到您尝试传递定时器的TFunction OR

  • 使用lets you pass this as a parameter

  • 的其他this重载

E.g。

SetTimer

我在网上找不到任何简单的引用,但是如果你搜索成员函数指针,或者hidden this parameter,你就可以知道出了什么问题。