在游戏开发中,状态机几乎是必不可少的,简单地说,状态机就是控制游戏对象在不同的状态下应该做什么事情的一个机制。
#ifndef__MUTOU_H__
#define__MUTOU_H__
#include"cocos2d.h"
USING_NS_CC;
enumEnumState{
enStateWriteCode,/*状态:写代码*/
enStateWriteArticle,0);">/*状态:写教程*/
enStateRest,0);">/*状态:休息*/
};
classMutou:publicCCNode{
public:
CREATE_FUNC(Mutou);
virtualboolinit();
/*当前状态*/
EnumStateenCurState;
/*判断是否写代码写累了*/
boolisTire();
/*是否想写教程*/
boolisWantToWriteArticle();
/*写代码*/
voIDwriteCode();
/*写教程*/
voIDwriteArticle();
/*休息*/
voIDrest();
/*切换状态*/
voIDchangeState(EnumStateenState);
virtualvoIDupdate(floatdt);
};
#endif
输出:
mutouiswirtingCode.
mutouisresting.
mutouiswritingarticle.
mutouiswirtingCode.
有限状态机的运用可以极大的简化程序 让代码更加的清晰易懂 便于阅读 当游戏主角能根据当前状态进行动作自动切换执行的时候可以极大的减少代码量
boolHelloWorld::init()
{
boolbRet=false;
do
{
CC_BREAK_IF(!cclayer::init());
/*新建木头角色*/
mMutou=Mutou::create();
/*初始化木头的状态为休息*/
mMutou->changeState(enStateRest);
this->addChild(mMutou);
bRet=true;
}while(0);
returnbRet;
}
#include"Mutou.h"
boolMutou::init(){
this->scheduleUpdate();
returntrue;
}
voIDMutou::changeState(EnumStateenState){
this->enCurState=enState;
}
boolMutou::isTire(){
/*每次问木头累不累,他都会说:累~*/
returntrue;
}
boolMutou::isWantToWriteArticle(){
/*有10%的概率想写教程(好懒~!)*/
floatran=CCRANDOM_0_1();
if(ran<0.1f){
returntrue;
}
returnfalse;
}
voIDMutou::writeCode(){
cclOG("mutouiswirtingCode.");
}
voIDMutou::writeArticle(){
cclOG("mutouiswritingarticle.");
}
voIDMutou::rest(){
cclOG("mutouisresting.");
}
voIDMutou::update(floatdt){
/*判断在每一种状态下应该做什么事情*/
switch(enCurState){
caseenStateWriteCode:
/*如果累了就休息,并且切换到休息状态*/
if(isTire()){
rest();
changeState(enStateRest);
}
break;
caseenStateWriteArticle:
if(isTire()){
rest();
changeState(enStateRest);
}
break;
caseenStateRest:
/*一定的概率写代码,一定的概率写教程,并且切换到相应的状态*/
if(isWantToWriteArticle()){
writeArticle();
changeState(enStateWriteArticle);
}
else{
writeCode();
changeState(enStateWriteCode);
}
break;
}
}
总结以上是内存溢出为你收集整理的cocos2dx有限状态机全部内容,希望文章能够帮你解决cocos2dx有限状态机所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)