使用有限状态机创建游戏角色路径规划

在本文中,将探讨如何创建使用有限状态机(Finite State Machine, FSM)的游戏角色,并专注于在基于瓦片的2D地图上进行路径规划。将以游戏《WestWorld》中的角色——金矿工鲍勃和他的妻子阿曼达为例,来展示如何实现这一功能。

本系列文章涵盖了以下主题:

  • WestWorld1 -有限状态机的基础知识
  • WestWorld2 - 两个代理(矿工和妻子)的FSM
  • WestWorld3 - 两个FSM代理之间的消息传递
  • WestWorld4 - Windows FormsGDI+的介绍
  • WestWorld5 - 本文 - 2D地图渲染

本教程的目标是向展示如何从头开始创建一个简单的游戏,不依赖于XNA、DirectX或Unity等高级API,这些API会为自动化整个过程。将仅使用Windows FormsGDI+来执行基本的地图渲染。

地图生成

在本系列文章中,发现使用开源且免费的地图编辑器Tiled非常有用。Tiled是一个通用的瓦片地图编辑器,它允许轻松创建瓦片地图布局。它足够灵活,可以容纳抽象的事物,如碰撞区域、敌人生成位置或增益位置。它以方便的标准*.tmx格式保存所有这些数据。

为了本文的目的,只需要使用一个对象层和几个瓦片层。对象层是指定特殊游戏元素的地方。使用对象,可以为地图添加大量信息以供游戏使用。对象层中的对象可以替代在源代码中硬编码坐标(如生成点、出口、入口等)的繁琐替代方案。还可以维护有关对象瓦片的额外数据,以存储游戏元素。

为了保持瓦片层的简单性,本项目使用了开源图形文件。可以在GitHub上的OpenPixels找到许多这样的文件。

使用Tiled的一个主要优势是它允许在所有基本数据结构上设置自定义属性。对于WestWorld,使用自定义属性来存储将在游戏匹配枚举值的信息。

为了读取*.tmx文件,使用了TileSharp的修改版本TiledBasic。这种实现允许将类和游戏信息读入。TiledBasic用于解析和导入由Tiled生成的TMX文件。*.tmx地图文件中的每个瓦片都被读入一个Map类。

瓦片渲染

一旦读取了所有瓦片,它们就可以通过Scene类的Draw()方法之一在屏幕上渲染。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485