在这之前,先来说下什么是有限状态机(Finite-state machine)
背景
我们在开发游戏,比如rpg游戏时,会涉及到玩家有各种状态,如攻击状态,等待状态等,如果用ifelse也可以实现,但是随着程序复杂度越来越高,这样肯定是不易于代码维护的,很容易出错,而且代码可读性比较差。这时,用状态机就可以很好的解决这些问题。我们可以通过状态机来记录它的各个状态(state)和状态之间的转换(transition),并且设置回调函数来做一些处理。
状态机特征
1.状态总数是有限的。
2.任一时刻,只处在一种状态中。
3.某种条件下,会从一种状态转变到另一种状态。
使用方法
把state-machine.min.js导入为cocoscreator插件,
var turnFsm = new StateMachine({
init:'none',
transitions: [
{ name: 'toStart', from: 'none', to: 'start' },
{ name: 'playerTurn', from: 'start', to: 'player' },
{ name: 'enemyTurn', from: 'player', to: 'enemy' },
{ name: 'finish', from: 'enemy', to: 'end' },
{ name: 'restart', from: 'end', to: 'start' }
],
methods: {
onStart: function() {
console.log("onStart")
turnFsm.playerTurn(); //错误示范,此时调用会报错
},
onPlayer: function(){
console