在这之前,先来说下什么是有限状态机(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

在开发游戏时,有限状态机用于管理各种状态和状态转换,提高代码可维护性。然而,可能出现'transition is invalid while previous transition is still in progress'的错误。这表示前一个状态转换尚未完成。解决方案是通过setTimeout确保在前一个转换完成后执行新的转换。
最低0.47元/天 解锁文章
4135

被折叠的 条评论
为什么被折叠?



