創建一個可以使用時間的物體

創建一個可以使用時間的物體

 

 

先選擇添加代碼到項目,創建繼承自ActorCountDown

 

#pragma once

 

#include "GameFramework/Actor.h"

#include "CountDown.generated.h"

 

UCLASS()

class MYTEST_API ACountDown : public AActor

{

GENERATED_BODY()

public:

// Sets default values for this actor's properties

ACountDown();

//初始設置時間

int32 CountDownTime;

//顯示字體內容

UTextRenderComponent* CountdownText;

//更新時間顯示

void UpdateTimerDisplay();

//時間衰退

void AdvanceTimer();

//當時間結束

void CountdownHasFinished();

//定時器的手柄

FTimerHandle CountdownTimerHandle;

 

virtual void BeginPlay() override;

};

 

.cpp文件

 

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

 

#include "MyTest.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 = false;

//創建字體顯示

CountdownText = CreateDefaultSubobject<UTextRenderComponent>(TEXT("CountdownNumber"));

CountdownText->SetHorizontalAlignment(EHTA_Center);//設置水平中心對齊

CountdownText->SetWorldSize(150.0f);//設置字體大小

CountdownText->AttachTo(RootComponent);//將該字體附在根節點下

RootComponent = CountdownText;//設置爲根節點

 

CountDownTime = 3;

 

}

 

//設置顯示的內容爲CountDownTime

void ACountDown::UpdateTimerDisplay()

{

CountdownText->SetText(FString::FromInt(FMath::Max(CountDownTime, 0)));

}

 

void ACountDown::AdvanceTimer()

{

--CountDownTime;

UpdateTimerDisplay();

if (CountDownTime < 1)

{

//當時間小於1,清除定時器手柄

GetWorldTimerManager().ClearTimer(CountdownTimerHandle);

CountdownHasFinished();//計時已經結束

}

}

 

void ACountDown::CountdownHasFinished()

{

CountdownText->SetText(TEXT("GO"));

}

 

void ACountDown::BeginPlay()

{

Super::BeginPlay();

//更新顯示

UpdateTimerDisplay();

//設置時間手柄CountdownTimerHandle調用AdvanceTimer

GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountDown::AdvanceTimer, 1.0f, true);

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章