详解Cocos2D-X中的有限状态机

    作者:课课家教育更新于: 2016-04-19 16:20:17

      在游戏开发中状态机是一种非常重要的技术,可以说是不可或缺的,本篇教程将为你简单讲解一下Cocos2d-x中状态机的概念以及运用。

      正文:

      1. 简单认识。

      在游戏开发中,状态机几乎是必不可少的,关于状态机的专业解释,大家请百度一下。

      简单地说,状态机就是控制游戏对象在不同的状态下应该做什么事情的一个机制(帅帅地提示一下,它很强大,强大到你无法想象~)

      2. 来写一个很好玩的游戏吧。

      比如,我们要写一个很厉害很好玩的游戏,这个游戏的设想是这样的:

      游戏世界里有一个木头,这个木头很多兴趣爱好。比如,他一有空就会写代码,写累了他就会停下来,然后...敲代码,敲累之后,他就会...写代码。可有时候他会突发奇想地要写一篇教程,因为他刚刚学会了新知识迫不及待的要分享。

      就是这样,一个兴趣爱好广泛的木头,每天都干着这些多姿多彩的事情。

      3. 开始进入正题。

      那么,这个木头有这么多种状态,我们应该怎么用程序去实现这个逻辑呢?对了~!就是用状态机。

      刚刚只是开了一个玩笑,写代码和敲代码是同一件事情,木头只有两种状态:写代码和写教程,以及休息。

      4. 类代码

    详解Cocos2D-X中的有限状态机_Cocos2D-X状态机_Cocos2D-X教程_Cocos2D-X学习_课课家

      这是一个很简单的类,他有一些函数,用来做一些事情,他还有一个状态,表示他当前正在做什么事情。

      接着,留意到Mutou类的update函数了吗? 我们在update函数里做一些事情(如果你不知道Cocos2d-x的update函数的相关知识和使用方式,请百度一下,有很多资料~)

      其实,注释已经很详细了,判断木头当前的状态,在不同状态下又会做出一些行为,并且改变状态。

      5. 开始让木头活起来~!

      现在,我们来随便新建一个Cocos2d-x项目,然后把HelloWorldScene的init函数多余的东西删掉,加入我们需要的代码:

      bool HelloWorld::init()

      {

      bool bRet = false;

      do

      {

      CC_BREAK_IF(! CCLayer::init());

      /* 新建木头角色 */

      mMutou = Mutou::create();

      /* 初始化木头的状态为休息 */

      mMutou->changeState(enStateRest);

      this->addChild(mMutou);

      bRet = true;

      } while (0);

      return bRet;

      }

      很简单,我们给HelloWorld类加了一个成员变量mMutou,然后在init里新建了一个Mutou对象,并且把它的状态初始化为休息。

      我们用调试模式运行程序,将看到以下日志的输出:

      mutou is wirting Code.

      mutou is resting.

      mutou is wirting Code.

      mutou is resting.

      mutou is writing article.

      mutou is resting.

      mutou is wirting Code.

      mutou is resting.

      mutou is wirting Code.

      这实在是太神奇了~!这就是状态机,如此简单,却又如此强大。

      他可以完成很复杂的事情(包括人工智能~!)。

      用我的理解,那就是一句话:对象在面对不同情况时,根据自身的状态做出不同的响应,并且对象的状态个数是有限的。

      好了,强大的状态机(其实我介绍的确切的说应该叫做“有限状态机”)就是这么简单。

课课家教育

未登录

1