Delta3D 人工智能 AI 分析

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
{...............
};


从上面看到了,c++的模版很强大滴,完全是基于零件化的装配!!!! 见 基于policy 的c++编程: http://blog.csdn.net/zhuyingqingfen/article/details/28108627

testAI我已经改为完全基于DeltaAIInterface,用WaypointGraphAStar 算法,这样可以用AIUtility了,在创建好路点后就可以用TestAI做实验了,代码连接:

http://download.csdn.net/detail/zhuyingqingfen/7441321,路标颜色有点问题,不过核心是应该没有问题的。有什么问题欢迎指出。。。。。 


好吧,今天先写到这,还有很多很多有意思的.................NPC、FSM、Sensor、Planner、慢慢完善吧。。。。。




你可能感兴趣的:(Delta3D 人工智能 AI 分析)