天天看點

UE4學習筆記8th:變量, 計時器,和事件

建立C++項目,命名為HowTo_VTE

UE4學習筆記8th:變量, 計時器,和事件

建立一個新的C++類,父類選擇Actor,命名為Countdown

UE4學習筆記8th:變量, 計時器,和事件

在Countdown.h中輸入定義:

int32 CountdownTime;

UTextRenderComponent* CountdownText;

void UpdateTimerDisplay();
           
UE4學習筆記8th:變量, 計時器,和事件

在Countdown.cpp中輸入:

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

CountdownTime = ;
           
UE4學習筆記8th:變量, 計時器,和事件

開啟定時器

在最下面定義一個新函數,顯示倒數:

void ACountdown::UpdateTimerDisplay()
{
CountdownText->SetText(FString::FromInt(FMath::Max(CountdownTime, )));
}
           
UE4學習筆記8th:變量, 計時器,和事件

在Countdown.h裡添加定義:

void AdvanceTimer();
void CountdownHasFinished();
FTimerHandle CountdownTimerHandle;
           
UE4學習筆記8th:變量, 計時器,和事件

回到Countdown.cpp,添加:

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

void ACountdown::CountdownHasFinished()
{
//顯示“GO”
CountdownText->SetText(TEXT("GO"));
}
           
UE4學習筆記8th:變量, 計時器,和事件

接下來就是編譯,,,将Countdown拖入視口中

UE4學習筆記8th:變量, 計時器,和事件

按下Alt+P,你會看到原本Text處會出現倒數,出現GO後停止。

UE4學習筆記8th:變量, 計時器,和事件
UE4學習筆記8th:變量, 計時器,和事件
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(f);
RootComponent = CountdownText;

CountdownTime = ;

}

// Called when the game starts or when spawned
void ACountdown::BeginPlay()
{
Super::BeginPlay();

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

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

}

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



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

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

繼續閱讀