WestWorld v5





0/5 (0投票)
一个持续演示有限状态机(FSM)的系列,其中代理居住在一个名为WestWorld的小镇。
注意:这是CodeProject文章系列WestWorld的第5部分。要获取本文的更多背景信息
引言
一个关于如何创建利用有限状态机的代理的实际示例。在本文中,我重点介绍基于瓷砖的2D地图中的路径查找。我们将研究AStar寻路算法的游戏动态。WestWorld有两名居民 - 一名叫做矿工Bob的淘金者和他的妻子Amanda。
在本系列的历史中,我们已经涵盖了以下主题
WestWorld1
- 有限状态机(FSM)的基础知识WestWorld2
- 带有两个代理的FSM(矿工和妻子)WestWorld3
- 两个FSM代理之间的消息传递WestWorld4
- WindowsForms GDI+简介WestWorld5
- (本文) 2D地图渲染
背景
本教程的目的是向您展示如何从头开始创建一个简单的游戏,而无需像XNA或DirectX或Unity这样的高级API的帮助,它们可以自动执行该过程。我们将仅使用Windows Form GDI+来执行基本的地图渲染。
映射生成
在本系列文章中,我发现使用Tiled(开源且免费的地图编辑器)很有帮助。
Tiled是一个通用的瓦片地图编辑器。它是一个免费工具,可以轻松创建瓦片地图布局。它足够通用,可以允许抽象的东西,例如碰撞区域,敌人生成位置或能量提升位置。它将所有这些数据保存在方便,标准化的*.tmx格式中。
对象层
就本文而言,我们只需要使用对象层和几个瓦片层。 对象层是我们指定特殊游戏元素的地方。使用对象,您可以向地图添加大量信息以供游戏中使用。对象层中的对象可以替代繁琐的替代方法,例如在源代码中硬编码坐标(例如,生成点,出口,入口等)。您还可以维护有关对象图块的附加数据,以存储游戏元素。
瓦片层
为了使Tile Layer简单,该项目使用了开源图形文件。 可以在此处找到许多文件之一:Github上的OpenPixels。
自定义属性
使用Tiled的主要优点之一是,它允许在其所有基本数据结构上设置自定义属性。 为了WestWorld的目的,我正在使用自定义属性来存储将用于匹配游戏中的Enum值的信息。
TiledBasic
为了读取*.tmx文件,我正在使用TileSharp的修改版本,称为TiledBasic。 此实现允许我读取到我的类和游戏信息中。 TiledBasic用于解析和导入由Tiled生成的TMX文件。 *.tmx Map
文件中的每个Tile
都读取到Map类中。
瓦片渲染
读取所有瓦片后,可以通过Scene
类的Draw()
方法之一将其渲染在屏幕上。
寻路
游戏中的寻路有助于找到两点之间的最短路径。 这就像解决迷宫的实用方法。 A *基于网格的寻路非常适合游戏,因为角色可以沿着x轴和y轴移动。 WestWorld中使用的改编算法允许AI角色根据到达目标的路线遵循所选的路径。
在此版本(WestWorld v.5)中,我们为NPC定义了“硬编码”路线。 但是,在本系列的未来和最终版本中,我们将讨论一种更聪明的方法,以使非玩家角色(NPC)能够“思考”并选择(即,决策树)要追求的目标。