.h文件
UCLASS()
class Test_API UMyUMG : public UUSerWidget
{
GENERATED_BODY()
public:
/*请求使用ActiveTimer,相当于注册了一个定时器的函数*/
void RequestUseActiveTimer();
private:
/*开始处理ActiveTimer,调用注册的定时器函数 */
EActiveTimerReturnType HandleActiveTimer(double InCurrentTime, float InDeltaTime);
/*取消ActiveTimer,取消注册的定时器函数*/
void CancelActiveTimer();
/** The handle to the active timer,定时器函数的指针 */
TWeakPtr<FActiveTimerHandle> ActiveTimerHandle;
/*测试用的一个计数变量,等于50的时候,停止执行处理函数*/
int32 Count;
};
.CPP文件
void UMyUMG::RequestUseActiveTimer()
{
if (!ActiveTimerHandle.IsValid())
{
/*获取UMG里的一个SWidget*/
TSharedPtr<SWidget> ThisPtr = GetCachedWidget();
/*给这个SWidget注册一个定时器执行函数,参数0.f表示多久后执行注册的函数*/
ActiveTimerHandle = ThisPtr->RegisterActiveTimer(0.f, FWidgetActiveTimerDelegate::CreateUObject(this, &UMyUMG::HandleActiveTimer));
}
}
void UMyUMG::CancelActiveTimer()
{
if (ActiveTimerHandle.IsValid())
{
/*获取UMG里的一个SWidget*/
TSharedPtr<SWidget> ThisPtr = GetCachedWidget();
/*把这个SWidget注册的函数给取消注册了*/
ThisPtr->UnRegisterActiveTimer(ActiveTimerHandle.Pin().ToSharedRef());
}
}
/*执行期间的逻辑都在这里执行*/
EActiveTimerReturnType UMyUMG::HandleActiveTimer(double InCurrentTime, float InDeltaTime)
{
/*如果Count等于50就停止计数执行了*/
if ( 50 ==Count )
{
return EActiveTimerReturnType::Stop;
}
/*如果Count不等于50就继续计数和执行该函数*/
++ Count;
return EActiveTimerReturnType::Continue;
}
|