嗨起来 发表于 2016-12-9 11:32:51

教你如何在Slate里面如何使用ActiveTimer

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


zz_nirvana 发表于 2016-12-9 11:48:44

cool~~~~~~~~~~~

bluemain 发表于 2016-12-9 11:57:44

棒棒棒!!!

zjmlife 发表于 2016-12-9 22:09:33

cool~~~~~~~~~~~

虚幻小霸王 发表于 2016-12-10 14:06:58

我去这个太好了啊

yuemingxishan 发表于 2016-12-10 21:24:50

看到C++的我,瞬间吓尿了

mjlantcool 发表于 2016-12-17 14:21:46

虽然自信对蓝图还有点心得,但是C++完全看不懂了。。。。

小叶 发表于 2016-12-23 09:06:06

C++完全看不懂

ajhonson4 发表于 2016-12-30 21:31:12


感谢楼主分享
页: [1]
查看完整版本: 教你如何在Slate里面如何使用ActiveTimer