【UE4官方案列学习】在UE4使用计时器实现一个倒计时事件(定时生成物体)

Courtship 等级 45 0 0
标签: ue4计时器

UE4 Version: 4.27.0 Visual Studio 2019 16.10.2



在UE4使用计时器实现一个倒计时事件

.h文件定义

#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/TextRenderComponent.h"
#include "Countdown.generated.h"

UCLASS()
class CLASSSIMPES_API ACountdown : public AActor
{
    GENERATED_BODY()

public:    
    // Sets default values for this actor's properties
    ACountdown();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public:    
    // Called every frame
    virtual void Tick(float DeltaTime) override;

    UPROPERTY(EditAnywhere)
    int32 CountdownTime;
    UTextRenderComponent* CountdownText;

    void UpdateTimerDisplay();//更新显示
    void AdvanceTimer();
    void CountdownHasFinished();//时间结束时的特殊动作

    FTimerHandle CountdownTimerHandle;//句柄
};

类定义详解

int32 CountdownTime//定义了一个int32类型的倒计时时间

  • int32为虚幻整数类型,虚幻整数类型分为有符号和无符号,分别为intunit,有8,16,32,64四种。

UTextRenderComponent* CountdownText//定义了一个UTextRenderComponent类的可显示文本组件

  • 在头文件中只是先声明,在cpp里还要用CreateDefaultSuobject创建完整的组件

void UpdateTimerDisplay()//创建了一个更新器,用于更新显示字体

void AdvanceTimer()//

void CountdownHasFinished()//用于结束时执行的特殊动作

FTimerHandle CountdownTimerHandle//定义了一个句柄

  • 句柄:用于识别的唯一ID

.cpp文件

#include "Countdown.h"

// Sets default values
ACountdown::ACountdown()//类当中的参数初始化
{
     // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = false;
    //将此Actor设为逐帧调用Tick(),关闭提高性能

    CountdownText = CreateDefaultSubobject<UTextRenderComponent>(TEXT("CountdownNumber"));//添加TEXTRENDER组件
    CountdownText->SetHorizontalAlignment(EHTA_Center);//设置对齐方式
    CountdownText->SetWorldSize(150.0f);//设置大小
    RootComponent = CountdownText;//设置这个组件为根组件
    CountdownTime = 3;//初始化倒计时





}

// Called when the game starts or when spawned
void ACountdown::BeginPlay()//开始时执行
{
    Super::BeginPlay();

    UpdateTimerDisplay();//
    GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountdown::AdvanceTimer, 1.0f, true);    
}

// Called every frame
void ACountdown::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

}

void ACountdown::UpdateTimerDisplay()
{
    CountdownText->SetText(FString::FromInt(FMath::Max(CountdownTime, 0)));
    //Max:比较两数较大者,并返回较大数
    //FromInt:强制类型转换,将int类型强制转化为string类型
    //settext:设置字体组件里的值
}

void ACountdown::AdvanceTimer()
{
    --CountdownTime;//减去倒数时间1

    UpdateTimerDisplay();//更新显示

    if (CountdownTime < 1)
    {
        //倒数完成,停止运行定时器
        GetWorldTimerManager().ClearTimer(CountdownTimerHandle);
        CountdownHasFinished();
    }
}

void ACountdown::CountdownHasFinished()
{
    //改为特殊读出
    CountdownText->SetText(TEXT("GO"));
}

.cpp文件详解

Countdown()构造函数

  • CreateDefaultSubobject初始化
  • SetHorizontalAlignment(EHTA_Center);设置对齐方式:对齐方式还有EHTA_Left,EHTA_Right.
  • SetWorldSize(150.0f);设置大小,接受一个浮点值
  • CountTime初始化倒计时时间

UpdateTimerDisplay()

SetText(FString::FromInt(FMath::Max(CountdownTime, 0)))

  • //Max:比较两数较大者,并返回较大数
  • //FromInt:强制类型转换,将int类型强制转化为string类型
  • //settext:设置字体组件里的值

AdvanceTimer()//计时器,实行倒计时事件

定时器函数(Timer)

template<class UserClass> void SetTimer ( FTimerHandle & InOutHandle, UserClass * InObj, typename FTimerDelegate::TUObjectMethodDelegate< UserClass >::FMethodPtr InTimerMethod, float InRate, bool InbLoop, float InFirstDelay )

  • InOutHandle 是我们要设置的计时器,即句柄
  • UserClass 调用timer函数的object(this)
  • InTimerMethod timer会重复执行的方法(&ACountdown::AdvanceTimer)
  • InRate 调用频率,例如填0.5f的话,那么InTimerMethod就会每隔0.5f调用一次
  • InbLoop 是否循环,如果是false的那么方法只会执行一次
  • InFirstDelay 第一次调用之前延时的时间,例如5.0f,那么过5秒后,方法才执行,然后才根据InRate 正常调用。
收藏
评论区

相关推荐

😎手撕吊打面试官系列面试题
js基础 1. 用js打印一个乘法表 这一题面试官考察的是你关于js的打印相关基础api的熟悉程度,以及基本的数学常识,送分题 console.log( 111 212 224 313 326 339 414 428 4312 4416 515 5210 5315 5420 5525
面试官在“逗”你系列:数组去重你会几种呀?
前言 数组去重是一个老生常谈的话题,也是前端童鞋在面试时的一道高频题。本文将深入的探索数组去重的原理及实现,为各位小伙伴提供多种可以反手“调戏”面试官的解决方案。 话不多说,上去就来一梭子... 数组去重核心原理 价值100W的核心原理上来就给你了...,记得留言点赞鸭! 1. 一般我们都会创建临时变量tmp,存储不重复的元素(以数组元素存储或对
面试官在“逗”你系列:连续子数组的最大和或最小和
前言 本文题目是“连续子数组的最大和或最小和”。 话不多说,开始“打怪”修炼... 一、理解题目 以“连续子数组的最大和”为例,相当于我们在数组中,计算连续的子数组的和,找寻最大值。如在数组3, 2, 1, 2, 4, 6, 5中连续子数组的最大和为:3 (2) 1 2 4 8 输入:3, 2, 1, 2, 4, 6,
MQ消息中间件,面试能问些什么?
MQ消息中间件,面试能问些什么? ---------------- **为什么使用消息队列?消息队列的优点和缺点?** **kafka、activemq、rabbitmq、rocketmq都有什么优缺点?** 面试官角度分析: (1)你知不知道你们系统里为什么要用消息队列这个东西? (2)既然用了消息队列这个东西,你知不知道用了有什么好处? (3
IDM 激活破解工具
官网免费下载的idm有试用期,需要序列号才能激活永久使用。下面使用的工具可以破解得到一串可行的序列号,达到激活的目的。 # **激活方法** 1、前提是你已经在官网下载了IDM,没有的话点击这里 [https://www.internetdownloadmanager.com](https://www.oschina.net/action/GoToLin
UE4 打包(完整包及补丁包)过程 —— Windows & Linux
将Unreal Engine项目发布使用之前,必须正确的打包,打包确保所有都是最新的,并能在对应平台上运行的正确格式。以 UE4.19 为例子 * **Windows平台** **创建包** ![](https://img2018.cnblogs.com/blog/1479081/201809/1479081-20180905144455931-1
UE4.26开发环境安装
重拾UE4 之开发环境安装 ============= 安装UE4.26 -------- 注册账号,下载安装即可。 ![在这里插入图片描述](https://oscimg.oschina.net/oscnet/up-21989615f5cf917662b2c212b5e8f4b5.png) 安装配置Visual Studio 2017 -----
Canvas:技术小结
Canvas:技术小结 =========== ### 资料 **【教程:MDN官方中文教程】** https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas\_API/Tutorial **【系列博客:每天一点Canvas动画】** https://segmentfault.com/blog/z
FlutterDojo设计之道—状态管理之路(七)
Provider在列表中使用 -------------- 在前面的讲解中,我们大部分的场景都是在普通的Box布局中,相信大家对Provider的使用已经非常清楚了,下面来看下在List中的使用场景,相信对于很多App来说,列表应该是大部分页面的核心UI,所以,到底如何在列表的「下拉刷新」、「上拉加载更多」、「Item点击修改状态」这几种场景下来使用Pro
Hessian不能正确序列化和反序列化BigDecimal的解决
某次往Redis里面缓存对象,发现取出的对象里面,BigDecimal属性全都变成了0。后发现问题出在使用的序列化、反序列化的工具Hessian上面。 Hessian的这个问题,从网上搜索,可以说是一大堆。看到早期的解决方案是在jar包的META-INF目录里面新建hessian目录,并填入两个配置文件,告诉Hessian,类的转换关系。 但是现在大家都
Kubernetes官方java客户端之二:序列化和反序列化问题
### 欢迎访问我的GitHub [https://github.com/zq2599/blog\_demos](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fzq2599%2Fblog_demos) 内容:所有原创文章分类汇总及配套源码,涉及Java、Doc
RabbitMQ的简单模式快速入门与超时异常的处理方法
#### 本文适合JAVA新人,想了解RabbitMQ又不想去看官网文档的人(英语水看的头疼(◎﹏◎),但建议有能力还是去看官网文档)。 消息队列MQ(一) --------- MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。 先引入一下常见的通讯方案。 ![](https://oscimg.oschina.net/
vue 使用mint
**解决了官网中下拉刷新存在的问题** <template> <div class="tmpl"> <nav-bar title="商品列表"></nav-bar> <div class="main-body" ref="wrapper" :style="{ height: (wrapperHeight-
【UE4官方案列学习】在UE4使用计时器实现一个倒计时事件(定时生成物体)
UE4 Version: 4.27.0 Visual Studio 2019 16.10.2 在UE4使用计时器实现一个倒计时事件 .h文件定义pragma onceinclude "CoreMinimal.h"include "GameFramework/Actor.h"include "Components/TextRenderComponent.h"i

热门文章

最新文章