【UE4 C++】定时器 Timer 与事件绑定

66 篇文章 6 订阅

概念

  • 定时执行操作,可执行一次,或循环执行直到手动终止
  • 定时器在全局定时器管理器(FTimerManager 类型)中管理。全局定时器管理器存在于 游戏实例 对象上以及每个 场景 中
  • 定时器需要绑定委托或函数,作为执行体。这些函数将填充 FTimerHandle 定时器句柄
  • FTimerHandle 支持 暂停、恢复倒计时;查询或更改剩余时间;取消定时器
  • 设置定时器的函数
    • SetTimer 定时执行
    • SetTimerForNextTick 下一帧执行
  • 使用案例
    • 定时 SpawnActor
    • 定时销毁
    • buff持续,如霸体、持续伤害

设置定时器

  • SetTimer 方法

  • 支持 FTimerDelegate 委托,可以扩展使用 Lambda 表达式,可以带参数

  • GetWorldTimerManager() 等价于 GetWorld()->GetTimerManager()

    template<class UserClass>
    void SetTimer
    (
        FTimerHandle & InOutHandle,
        UserClass * InObj,
        typename FTimerDelegate::TUObjectMethodDelegate_Const< UserClass >::FMethodPtr InTimerMethod,
        float InRate,
        bool InbLoop,
        float InFirstDelay
    )
    
  • 代码实现

    FTimerHandle SpawnerHandle;
    
    GetWorldTimerManager().SetTimer(SpawnerHandle, this, &AEnenmySpawner::SpawnEnemy, 5.0f, true);	
    
    void AEnenmySpawner::SpawnEnemy()
    {
    	GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Red, "Spawn");
    }
    

清空定时器

  • ClearTimer

  • ClearAllTimersForObject 清空与特定对象关联的所有定时器

    GetWorldTimerManager().ClearTimer(SpawnerHandle);
    
    // 参数传入一个对象,本例以 this 举例
    GetWorldTimerManagerr().ClearAllTimersForObject(this);
    

暂停和恢复

  • PauseTimer

  • UnPauseTimer

    GetWorldTimerManager().PauseTimer(SpawnerHandle);
    GetWorldTimerManager().UnPauseTimer(SpawnerHandle);
    GetWorldTimerManager().IsTimerPaused(SpawnerHandle);
    

判断是否活跃且未暂停

  • IsTimerActive

    GetWorldTimerManager().IsTimerActive(SpawnerHandle);
    

获取定时器速率

  • GetTimerRate
    句柄若无效,返回-1

    GetWorldTimerManager().GetTimerRate(SpawnerHandle);
    

获取经过时间和剩余时间

  • GetTimerElapsed
    句柄若无效,返回-1

  • GetTimerRemaining
    句柄若无效,返回-1

    GetWorldTimerManager().GetTimerElapsed(SpawnerHandle);
    GetWorldTimerManager().GetTimerRemaining(SpawnerHandle);
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于C语言中的定时器,可以使用SetTimer函数来设置。在C语言中,SetTimer函数可以定时执行一个回调函数。一个简单的示例代码如下: ``` // 定义回调函数 void timerCall(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { // 在这里写定时器触发后要执行的代码 } int main() { // 创建定时器 SetTimer(NULL, 0, 5000, timerCall); // 其他代码... return 0; } ``` 在这个示例中,使用SetTimer函数创建了一个定时器,它会每隔5000毫秒(即5秒)触发一次回调函数timerCall。在回调函数中,可以编写要执行的代码。需要注意的是,定时器的回调函数的参数类型是固定的,不能随意更改。 另外,需要包含相应的头文件和函数声明,具体的使用方式可以根据具体的C语言开发环境和需求进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++定时器](https://blog.csdn.net/Poo_Chai/article/details/130111116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Timer定时器(C++)](https://blog.csdn.net/u011073673/article/details/52885682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值