UE4学习笔记8th:变量, 计时器,和事件

创建C++项目,命名为HowTo_VTE
这里写图片描述

创建一个新的C++类,父类选择Actor,命名为Countdown
这里写图片描述

在Countdown.h中输入定义:

int32 CountdownTime;

UTextRenderComponent* CountdownText;

void UpdateTimerDisplay();

这里写图片描述

在Countdown.cpp中输入:

CountdownText = CreateDefaultSubobject<UTextRenderComponent>(TEXT("CountdownNumber"));
CountdownText->SetHorizontalAlignment(EHTA_Center);
CountdownText->SetWorldSize(150.0f);
RootComponent = CountdownText;

CountdownTime = 3;

这里写图片描述

开启定时器

在最下面定义一个新函数,显示倒数:

void ACountdown::UpdateTimerDisplay()
{
CountdownText->SetText(FString::FromInt(FMath::Max(CountdownTime, 0)));
}

这里写图片描述

在Countdown.h里添加定义:

        void AdvanceTimer();
void CountdownHasFinished();
FTimerHandle CountdownTimerHandle;

这里写图片描述

回到Countdown.cpp,添加:

void ACountdown::AdvanceTimer()
{
--CountdownTime;
UpdateTimerDisplay();
if (CountdownTime < 1)
{
//停止计时
GetWorldTimerManager().ClearTimer(CountdownTimerHandle);
CountdownHasFinished();
}
}

void ACountdown::CountdownHasFinished()
{
//显示“GO”
CountdownText->SetText(TEXT("GO"));
}

这里写图片描述

接下来就是编译,,,将Countdown拖入视口中
这里写图片描述

按下Alt+P,你会看到原本Text处会出现倒数,出现GO后停止。

这里写图片描述

这里写图片描述

Countdown.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "GameFramework/Actor.h"
#include "Countdown.generated.h"

UCLASS()
class HOWTO_VTE_API ACountdown : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ACountdown();

// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called every frame
virtual void Tick( float DeltaSeconds ) override;

int32 CountdownTime;

UTextRenderComponent* CountdownText;

void UpdateTimerDisplay();

void AdvanceTimer();

void CountdownHasFinished();

FTimerHandle CountdownTimerHandle;
};




Countdown.cpp 
// Fill out your copyright notice in the Description page of Project Settings.

#include "HowTo_VTE.h"
#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 = true;

PrimaryActorTick.bCanEverTick = false;

CountdownText = CreateDefaultSubobject<UTextRenderComponent>(TEXT("CountdownNumber"));
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)));
}



void ACountdown::AdvanceTimer()
{
--CountdownTime;
UpdateTimerDisplay();
if (CountdownTime < 1)
{
//停止计时
GetWorldTimerManager().ClearTimer(CountdownTimerHandle);
CountdownHasFinished();
}
}

void ACountdown::CountdownHasFinished()
{
//显示“GO”
CountdownText->SetText(TEXT("GO"));
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值