UE4中的单映射:TMap容器
一、TMap<T>是么
TMap<T>是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系。因此你可以通过键名来快速查找到值。此外,单映射要求每个键都是唯一的。类似C++中的Map.
二、创建和填充单映射
如果你想创建一种单映射关系,每一个角色的名称对应着价格:
TMap<FString, int32> charaPrice;
现在,让我们来添加角色名称和价格的单映射关系:
charaPrice.Add("皮城执法官", 6300 );
charaPrice.Add("皎月女神", 6300);
charaPrice.Add("暗影之拳", 3150);
charaPrice.Add("德玛西亚皇子", 4800);
三、迭代单映射
由于单映射的数据结构也不是线性关系,而是二叉树。因此一般情况下,我们也不能通过下标索引来迭代单映射。但是我们依然可以使用迭代器进行迭代(由此看出使用迭代器进行迭代可以使得各种容器的迭代操作保持一致):
for(TMap<FString, int>::TIterator it = charaPrice.CreateIterator(); it; ++it){
GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::White,
it->Key + FString(" 的出售价格为: ") + FString::FromInt(it->Value) + FString("金币。"));
}
注意的是,迭代器指向了单映射的每一个元素时,可以用key来取得元素的键,用Value来取得元素的值。
运行后可以看到输出结果:

四、代码展示
void ANPC::Prox_Implementation(AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex, bool bFromSweep, const FHitResult & sweepResult)
{
//通过强制转换成AAVatar是否成功来判断是否玩家角色
if (Cast<AAvatar>(otherActor) == nullptr)
{
return;
}
//获得第一人称控制器
APlayerController* PController = GetWorld()->GetFirstPlayerController();
if (PController)
{
//获得HUD界面
AMyHUD* hud = Cast<AMyHUD>(PController->GetHUD());
hud->AddMessage(Message(NpcMessage, 5.f, FColor::White));
//测试Map
TMap<FString, int32> charaPrice;
charaPrice.Add(L"皮城执法官", 6300);
charaPrice.Add(L"皎月女神", 6300);
charaPrice.Add(L"暗影之拳", 3150);
charaPrice.Add(L"德玛西亚皇子", 4800);
//在使用容器的时候,为了容器的操作一致性,通常都会像下面这样使用迭代器来循环
//所谓的迭代器其实类似于一个指针,当对指针进行++时,就指向后面的元素。
//当超出容器范围的时候,迭代器为空,跳出循环
for (TMap<FString, int32>::TIterator it = charaPrice.CreateIterator(); it; ++it)
{
//GEngine是全局引擎变量,我们使用它的AddOnScreenDebugMessage函数来在游戏屏幕上打印调试信息。
//该函数第一个参数是调试输出的位置,填写-1就不会覆盖以前的调试信息。
//第二个参数是字体大小,第三个参数是字体颜色,第四个参数是要打印的字符串,这里用FromInt函数将Int转换FString。
GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::White, it->Key + FString(L" 的出售价格为: ") + FString::FromInt(it->Value) + FString(L"金币。"));
}
}
}
现在我们学了最常用的三种容器,动态数组容器——TArray,集合容器——TSet还有单映射——TMap。当然还有各种各样的容器,它们的操作都是大同小异的。C++的泛型编程的优点也在于此,它们提供了相似的接口使得我们非常容易精通各种各样高效的容器。在游戏开发中,我们很少会重新写基本的数据结构类型,因为游戏引擎已经为我们提供好了大多数的数据结构。但是并不意味着没有必要学习数据结构,只有当你学习过数据结构,才能熟练地运用游戏引擎为我们提供的容器。这和我们的学习游戏引擎原理于使用游戏引擎的关系是一样的。所以建议大家,学习工具的同时,不要忘记了同时学习工具的原理哦!
学习累了,给大家放几张游戏中的图片:
德玛西亚皇子:

皮城执法官:

皎月女神:

今天就学到这吧!未完待续!
UE4中的单映射:TMap容器的更多相关文章
- UE4中的集合:TSet容器
好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...
- 3D游戏开发之UE4中的集合:TSet容器
好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...
- [UE4]单映射:TMap容器,字典表
一.TMap是什么 TMap是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系.因此你可以通过键名来快速查找到值.此外,单映射要求每个键都是唯一的. 二.创建和填充单映射 如果你想创建一 ...
- UE4 中的 C++ 编程介绍
https://docs.unrealengine.com/latest/CHN/Programming/Introduction/index.html UE4 中的 C++ 编程介绍 Unreal ...
- Docker入门之六端口映射与容器互联
一.端口映射 在之前的博客搭建私有仓库时用到这样一句:docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry来r ...
- UE4中C++编程(一)
一: C++工程和Gameplay框架 GameInstance 它适合放置独立于关卡的信息,比如说显示UI. GameMode 表示游戏玩法, 包含游戏进行的规则和胜利条件等等信息,游戏模式是和关卡 ...
- UE4 中Struct Emum 类型的定义方式 笔记
UE4 基础,但是不经常用总是忘记,做个笔记加深记忆: 图方便就随便贴一个项目中的STRUCT和 Enum 的.h 文件 Note:虽然USTRUCT可以定义函数,但是不能加UFUNCTION 标签喔 ...
- UE4中使用数据表(Data Table)
本文依据官方文档数据驱动游戏性元素整理而来. 做过游戏的应该都清楚,如果游戏稍微有点规模,那么使用数据驱动来做游戏一般是必不可少的一步,一般也就是策划通过本表的方式来解决.下面我们来简单说一下UE4中 ...
- 5.2:缓存中获取单例bean
5.2 缓存中获取单例bean 介绍过FactoryBean的用法后,我们就可以了解bean加载的过程了.前面已经提到过,单例在Spring的同一个容器内只会被创建一次,后续再获取bean直接从单例 ...
随机推荐
- 外部SRAM实验,让STM32的外部SRAM操作跟内部SRAM一样(转)
源:外部SRAM实验,让STM32的外部SRAM操作跟内部SRAM一样 前几天看到开源电子论坛(openedv.com)有人在问这个问题,我特意去做了这个实验,这样用外部SRAM就跟用内部SRAM一样 ...
- 初学杂文 String类
String: 两个字符床 String stra 和String strb stra = "hello " ; strb = "hello " 在对象池中开 ...
- 【MySQL】JDBC连接MySQL的一些问题以及解决办法
[MySQL]JDBC连接MySQL的一些问题以及解决办法 http://blog.csdn.net/baofeidyz/article/details/52017047
- 环信 之 iOS 客户端集成四:集成UI 之 会话列表
1. 初始化 EaseConversationListViewController *chatListVC = [[EaseConversationListViewController alloc] ...
- vimplugin破解
必较常用的vi插件有:viplugin.Vrapper.eclim Vrapper没有用过,eclim在公司电脑上装,总是不能正常的连接gvim,所以也没有用 Viplugin,常用功能基本都有... ...
- Voilin 与 乐谱
小提琴属于高音乐器,所以它使用的是高音谱号: 用音的时候,线不够用,那就得上加线,或下加线. 小提琴的弦对应的五线谱的位置为: 第四弦,对应五线谱的下加两条线的下面 第三弦,对应五线谱的第一线的下面 ...
- SQL第三课-自动编号与初涉约束
自动编号:auto_increment一张数据表中,要设定字段的唯一性,就会用到编号,确保编号的唯一性是避免重名和数据混乱的一种方式.主键,一张表只能并只有一个.在创建字段表时,指定 PRIMARY ...
- iOS 项目上线流程
一.证书的导出 1.1 前期工作 首先你需要有一个苹果的开发者帐号,一个Mac系统. 如果没有帐号可以在打开http://developer.apple.com/ ...
- DDOS攻击(流量攻击)防御步骤
DDOS全名是Distributed Denial of service (分布式拒绝服务攻击),很多DOS攻击源一起攻击某台服务器就组成了DDOS攻击,DDOS 最早可追溯到1996年最初,在中国2 ...
- Java8 Lumbda表达式 初步
Java8 Lumbda表达式 初步 package com.stono.test; import java.util.function.BinaryOperator; public class Te ...