cocos2dx 3.0 了解有限状态机01

2024-05-28 16:18

本文主要是介绍cocos2dx 3.0 了解有限状态机01,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“有限状态机”是由有限的状态组成的一个机制。一个“状态”就是一个状况。你考虑一下门;它的“状态”有“开”或“关”以及“锁”与“未锁”。

以我自身为列子,目前正在写博客,则状态为“写博客”,当给我输入一个“写代码”状态时,我就将跳转“写代码”状态。

AS现在有三种事情要去做,上课、睡觉、写代码(三种状态);累了就要睡觉,醒了之后不是写代码就是去上课,但是最近失眠太严重,课程也太多,上课是必须去的,写代码就写不下去了,写代码的概率也就是10%;

下面介绍一下不能称之为状态机的状态机。其实也就是if-elseif -elseif ,或者说是switch/case的使用,对于小一点的游戏,感觉还可以使用,直接上代码。

#ifndef __AS__H__
#define __AS__H__
#include "cocos2d.h"
USING_NS_CC;enum State {Enum_GoClassState,Enum_WirteCodeState,Enum_GoSleepState
};class AS :public Node {
public:virtual bool init(); //覆写CREATE_FUNC(AS); //构造函数//判断是否累了bool isTired() { return true; };//判断是否想写代码bool isWantToWriteCode();//休息睡觉void GoSleep();//写代码void  WriteCode();//上课void GoToClass();//切换状态void changeState(State endState);//gengxinvirtual void update(float dt);private:State curState; //当前的状态};#endif

下面实现这些

#include "AS.h"
USING_NS_CC;bool AS::init() {if (!Node::init()) {return false;}this->scheduleUpdate();return true;
}bool AS::isWantToWriteCode() {float tmp = CCRANDOM_0_1(); //睡不着的情况下就是不想写啊if (tmp < 0.1f) {return true;}return false;
}void AS::GoSleep() {CCLOG("AS will sleep!");
}void AS::GoToClass() {CCLOG("AS will go to class!");
}void AS::WriteCode() {CCLOG("AS will write code!");
}/*切换状态
*/
void AS::changeState(State endstate) {this->curState = endstate;
}/*更新每帧
*/
void AS::update(float dt) {switch (curState){case Enum_GoClassState: //当AS在上课时if (isTired()) {GoSleep();//睡觉去changeState(Enum_GoSleepState); //将当前状态改为睡觉状态}break;case Enum_WirteCodeState: //写代码状态时if (isTired()) {GoSleep();//累了就睡去changeState(Enum_GoSleepState);}break;case Enum_GoSleepState: //睡醒了该干什么呢if (isWantToWriteCode()) { //如果想写代码//那就写呗WriteCode();changeState(Enum_WirteCodeState);}else { //还是上课去吧GoToClass();changeState(Enum_GoClassState);}break;default:break;}
}

以上便是AS类,包含一些执行方法(在这里写成输出字符串)。
下面来使用一下As类,让AS执行一些方法。

bool HelloWorld::init()
{//////////////////////////////// 1. super init firstif ( !Layer::init() ){return false;}Size visibleSize = Director::getInstance()->getVisibleSize();Vec2 origin = Director::getInstance()->getVisibleOrigin();auto as = AS::create();this->addChild(as);//初始化为睡觉状态as->changeState(Enum_GoSleepState);return true;
}

运行结果如下
AS will write code!
AS will sleep!
AS will go to class!
AS will sleep!
AS will go to class!
AS will sleep!
AS will go to class!
AS will sleep!
AS will go to class!
AS will sleep!
AS will go to class!
AS will sleep!
AS will go to class!
AS will sleep!
AS will go to class!

我去,看来AS最近失眠严重,不是睡觉就是上课,几乎没怎么写代码。

开始说过,写博客也是一种状态,给AS添加写博客的状态时,需要改动枚举类型、switch部分,但是如果是10种状态呢,很麻烦,看来还有更好更牛逼的方法,继续去学习了

这篇关于cocos2dx 3.0 了解有限状态机01的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1011059

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那