A* 算法描述 见http://blog.csdn.net/zhuyingqingfen/article/details/8739604
在dtAI 中的A* 算法中,关键的有几个类AIPluginInterface、 NavMesh、AStar、WaypointGraph、WaypointInterface。其中AIPluginInterface更像一个管理类,把其他类统一起来了。不过对于WaypointManager,这个类我感觉用着倒挺不方便,这个和AIUtility是格格不入(后来发现是为了向后兼容而没去掉),用AIUtility编辑后的脚本式新版本的ai脚本文件,而WaypointManager仍然是基于旧格式的脚本方式,所以你用AIUtility 编辑过map文件后,testAI这个例子就不能 运行了,因为AIUtility里用的是纯粹的AIPlugininterface(读取加载都是用的WaypointReaderWriter类)。虽然DeltaAIInterface种提供了一个 LoadLegacyWaypointFile方法加载ai文件,但还是建议最好不要用waypointmanager这个类来管理路点文件。
AIInterfaceActorProxy这个类 就是向外提供了AI角色,类中提供一个DeltaAIInterface(继承AIPluginInterface)对象,所以如果外界想获取和A*算法所有相关的信息,只有获取AIInterfaceActorProxy,然后再获取DeltaAIInterface即可。
dtAI提供了两种A* 算法,一个是基于路点的实现(通过waypointmanager,所以WaypointAStar这种方法不建议使用)
typedef AStar<WaypointNode, WaypointCostFunc, std::list<const WaypointInterface*>, AStarTimer > WaypointAStar;
另一个是基于路点图(这个是新式的,推荐使用WaypointGraphAStar)
typedef AStar<WaypointGraphNode, WaypointCostFunc, std::list<const WaypointInterface*>, AStarTimer > WaypointGraphAStarBase; class DT_AI_EXPORT WaypointGraphAStar: public WaypointGraphAStarBase {............... };
testAI我已经改为完全基于DeltaAIInterface,用WaypointGraphAStar 算法,这样可以用AIUtility了,在创建好路点后就可以用TestAI做实验了,代码连接:
http://download.csdn.net/detail/zhuyingqingfen/7441321,路标颜色有点问题,不过核心是应该没有问题的。有什么问题欢迎指出。。。。。
好吧,今天先写到这,还有很多很多有意思的.................NPC、FSM、Sensor、Planner、慢慢完善吧。。。。。