怪物AI

      关于怪物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;i<m;i++)
	{
		Entity* entity_tmp = *node;
		monster = (T*)entity_tmp;

		if (monster)
		{
			monster->updateState();
		}
		node->next();
	}
}

void GameEngine::Msgprocess()
{
	for(int i=0;i<n;i++)
	{
		Msg_Cmd* _msg = NULL;
		if(_msg_list.peek(_msg) && _msg != null)
		{
		     process(_msg);
		}
		else
		{
		     break;
		}
	}
}

    

转载于:https://www.cnblogs.com/archy_yu/archive/2013/04/03/2997591.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值