关于怪物AI,我思考了很长时间,前些日子一直在思考,如何将AI系统做成线程独立。由于是在找不到方案,最终放弃。之前有网友给我推荐说,可是讲AI当做客户端来处理。不错的方案,可是有很多逻辑思考不同,最终放弃。
我再参考了几个游戏的代码之后,决定AI系统就坐在逻辑线程里面好了,就不单独出来了。
大概的思路是,在逻辑线程运行的时候 ,保持每一个循环在处理N条消息的情况下,更新M只怪物的信息!这样既能及时响应客户端的需求,也能及时更新怪物的状态!!
代码:
void GameEngine::run(){ for(;;) { this->pre_process(); this->AIprocess(); this->Msgprocess(); this->post_process(); }}void GameEngine::AIprocess(){ T* monster; EntityPtrList::NodeType* node; for(int i=0;iupdateState(); } node->next(); }}void GameEngine::Msgprocess(){ for(int i=0;i