IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 12c++呵呵老师【变量,定时器和事件】 -> 正文阅读

[C++知识库]12c++呵呵老师【变量,定时器和事件】

1.添加一个actor类

?2.首先创建在游戏中显示的简单倒数定时器。在Countdown.h中,在类定义的末尾声明计时的变量和方法。

int32 CountdownTime;
//可渲染文本组件
UTextRenderComponent* CountdownText;
void UpdateTimerDisplay();

?记得引入相关头文件

#include "Components/TextRenderComponent.h"

3.在源文件的构造函数中,初始化可渲染的文本?组件,并将倒数时间初始化为3秒。

 //将此Actor设为逐帧调用Tick()。如无需此功能,可关闭以提高性能。
    PrimaryActorTick.bCanEverTick = false;
    CountdownText = CreateDefaultSubobject<UTextRenderComponent>(TEXT("CountdownNumber"));
    //设置对齐方式
    CountdownText->SetHorizontalAlignment(EHTA_Center);
    //设置字体大小
    CountdownText->SetWorldSize(150.0f);
    //设置根组件
    RootComponent = CountdownText;
    //初始化倒计时
    CountdownTime = 3;

4.ACountdown::UpdateTimerDisplay?应更新文本显示,以显示剩余时间。时间结束时,则显示为零

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

?5.在?Countdown.h?的类定义中添加倒数函数和控制其所需的定时器句柄。添加完成后,再添加一个函数,以便在倒数结束时执行特别操作:

void AdvanceTimer();

void CountdownHasFinished();

FTimerHandle CountdownTimerHandle;

6.初始化?ACountdown::BeginPlay?中显示的文本,并设置逐秒前进和更新倒数的定时器

UpdateTimerDisplay();
//这是一个程序内部的计时器,用来调用其他事件的
//CountdownTimerHandle:句柄
//this:本对象调用计时器
//&ACountdown::AdvanceTimer:函数指针调用函数,表示唤醒这个事件
//1.0f:每一秒唤醒一次
//true:循环执行
GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountdown::AdvanceTimer, 1.0f, true);

?7.编写?ACountdown::AdvanceTimer?和?ACountdown::CountdownHasFinished?的主体

void ACountdown::AdvanceTimer()
{
    --CountdownTime;
    UpdateTimerDisplay();
    if (CountdownTime < 1)
    {
        //倒数完成,停止运行定时器。
        GetWorldTimerManager().ClearTimer(CountdownTimerHandle);
        CountdownHasFinished();
    }
}

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

=========================

现在改进一下,加入反射

1.倒数定时器目前被硬编码为使用3秒的值。如可在编辑器中将倒数时间设为想要的任何值,此操作将十分有用,也较易完成。在?Visual Studio?中,可打开?Countdown.h。UPROPERTY?支持改变虚幻引擎使用变量方式的参数。需将变量设为可编辑,因此可添加?EditAnywhere?参数

UPROPERTY(EditAnywhere)
int CountdownTime;

2.编译,然后点击场景中的计时器,可以设置这个变量了

===================================

1.除改变定时器的值外,同时也使非程序员开发者可改变定时器启动时触发的操作。通过将这个函数变成?UFUNCTION,将其向虚幻引擎公开。

2.为了让非程序员调用C++函数,并用?蓝图?对其进行覆盖,需对?Countdown.h?进行以下修改。

UFUNCTION(BlueprintNativeEvent)
void CountdownHasFinished();
virtual void CountdownHasFinished_Implementation();

?BlueprintCallable?函数以C++编写,可从?蓝图图表?中调用,但只能通过编辑C++代码进行修改或重写。

在C++ header (.h)文件中设置?BlueprintImplementableEvent?函数,但是函数的主体则在蓝图图表中完成编写,而非C++中。创建此类通常是为了使非程序员能够对无预期默认动作或标准行为的特殊情况创建自定义反应。?

BlueprintNativeEvent?函数与?BlueprintCallable?和?BlueprintImplementableEvent?函数的组合类似。其具备用C++中编程的默认行为,但此类行为可通过在蓝图图表中覆盖进行补充或替换。对此类代码编程时,C++代码固定使用命名末尾添加了_Implementation的虚拟函数 (土话说:即当那啥,又立牌坊,两不误)

3.然后,在Countdown.cpp中,需对以下行进行修改:

//void ACountdown::CountdownHasFinished()
//注释掉CountdownHasFinished()
//用下面这个
void ACountdown::CountdownHasFinished_Implementation()

?4.然后进行定义

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

==========================================

使用蓝图扩展和覆盖C++

1. 得到一个蓝图

?2.编写蓝图

?3.测试失败,倒数被设为结束时显示GO!,而非0。由于已使用?蓝图?可视化脚本完全取代了C++功能,因此不会发生此情况。此结果并非理想结果。

4.通过右键点击?Countdown Has Finished?节点,并在快捷菜单中选择?添加对父函数的调用(Add call to parent function)?来完成。

?测试成功

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:51:43  更:2022-09-04 00:54:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 11:40:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码