test

状态驱动智能体的设计
,本篇中,大部分内容来自笔者阅读<游戏人工智能编程精粹>一书,以及自己的一些感想
本着"如果不能把自己所学的知识教给自己的祖母,那么证明自己还没有学到最好"
    基于有限状态机(FSM)架构的智能体设计被广泛的应用于游戏编程中,这种设计的好处是显而易见的,
1.易于调试,
2.很少的计算开销
3.灵活性
4.易于理解
在后面会对上面的特点分别阐述


在设计一个对象的状态机前,我们先来看看一个状态机的基本定义是什么
1.首先 他具有2种以上的状态
2.并且同一时刻jin


其次,这篇文章将通过改进一个程序的状态机设计,来讲述
程序是基于cocos2d-x 的,所以可能会需要您学习一些引擎知识
  源代码 在这里
改进前:
改进后:



先看看当前的对象+状态 抽象类 

为了减少平台与引擎相关,故我将一些宏定义,以及框架代码 尽量的在这里改写成最基本的形式




class ActionSprite : public CCSprite{
public:
    
    CC_SYNTHESIZE_RETAIN(CCAction*, _idleAction, IdleAction);
	CC_SYNTHESIZE_RETAIN(CCAction*, _attackAction, AttackAction);
	CC_SYNTHESIZE_RETAIN(CCAction*, _walkAction, WalkAction);
	CC_SYNTHESIZE_RETAIN(CCAction*, _hurtAction, HurtAction);
	CC_SYNTHESIZE_RETAIN(CCAction*, _knockedOutAction, KnockedOutAction);
    CC_SYNTHESIZE_RETAIN(CCAction*, _jumpAction, JumpAction);
    
    //角色当前状态
	CC_SYNTHESIZE(ActionState, _actionState, ActionState);
    VEC2_H_INCLUDED
    
    //attributes角色属性
	CC_SYNTHESIZE(float, _walkSpeed, WalkSpeed);
	CC_SYNTHESIZE(float, _hitPoints, HitPoints);
	CC_SYNTHESIZE(float, _damage, Damage);
    
	//movement用于计算精灵如何沿着地图运动
	CC_SYNTHESIZE(CCPoint, _velocity, Velocity);
	CC_SYNTHESIZE(CCPoint, _desiredPosition, DesiredPosition);
    
	//measurements用于计算精灵框体
	CC_SYNTHESIZE(float, _centerToSides, CenterToSides);
	CC_SYNTHESIZE(float, _centerToBottom, CenterToBottom);

    
    
    
    //更新循环
    void update(float dt);
    //状态触发函数
    void idle();
    void attack();
    void hurtWithDirection(float damage);
    void knockout();
    void walkWithDirection(CCPoint direction);
    void jump();
    
};






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值