Más contenido relacionado
Similar a Hxhsm——取代mvc的状态机框架 (20)
Hxhsm——取代mvc的状态机框架
- 2. 目录
• 为什么要用 HSM ?
• 什么是 HSM ?
• Haxe 的 HSM 实现—— hxhsm
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 3. 为 什么 要用 HSM ?
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 4. 为 什么 要用 HSM ?
网 • 显示
页 – Flash Player 已经封装了底层操作
游 – UI 框架成熟
戏
最 • 网络
难 – 多种成熟解决方案
的 • Protobuf 、 AMF……
是
什 • 业务逻辑
么 – 占用游戏大部分代码量
? – 需要控制其他所有模块:显示、网络……
– 不同于“领域逻辑”
• 无法提取简单正交的接口
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 5. 为 什么 要用 HSM ?
策 1. 行走结束,等待玩家操作
a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束交互逻辑。
划 b. 玩家点击一张可用占地卡且无需消耗额外卡牌,那么放置该占地生物并结
描 束交互逻辑。
c. 玩家点击一张可用占地卡且需要消耗额外卡牌,那么等待玩家点击消耗的
述 卡牌:
的 a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束交互逻辑
b. 玩家点击要消耗的卡牌,那么放置占地生物、两张卡牌都消耗并结束交互逻辑。
交 c. 玩家点击取消按钮,那么,返回步骤 1.
d. 玩家点击刚才经过移动时经过的己方生物,弹出土地操作菜单:
互 a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束交互逻辑
逻 b. 玩家选择潜在能力,并且该潜在能力可以直接使用,那么使用潜在能力并结束交互逻
辑
辑 c. 玩家选择潜在能力,并且该潜在能力需要对另一玩家使用,那么:
I. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束交互逻辑
II. 玩家点击玩家头像,那么使用潜在能力并结束交互逻辑
III. 玩家在地图上点击玩家,那么使用潜在能力并结束交互逻辑
IV. 玩家点击取消按钮,那么,返回步骤 1.
d. 玩家选择潜在能力,并且该潜在能力需要对另一地块使用,那么:
1. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束交互逻辑
a. 玩家在地图上点击地块,那么使用潜在能力并结束交互逻辑
b. 玩家点击取消按钮,那么,返回步骤 1.
其他情形……
其他情形……
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 6. 为 什么 要用 HSM ?
class WalkCompleteCommand extends Command
面 {
public static const STATE_WAIT:String = "wait";
向 public static const STATE_CARD_SELECTED:String = "cardSelected";
public static const STATE_DONE:String = "done";
对 // ......
private var state:String;
象 private function card_clickHandler(event:MouseEvent):void
风 {
switch (state)
格
{
case STATE_WAIT:
的
{
state = STATE_CARD_SELECTED;
逻
// ......
break;
辑
}
case STATE_CARD_SELECTED:
{
代 // ......
break;
码 }
// ......
}
}
}
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 7. 为 什么 要用 HSM ?
const effect1:DisplayObject =
异 playOnce(movieCache,effectPath,function():void
步 {
风
const effect2:DisplayObject =
playOnce(movieCache,effectPath,function():void
格 {
的
// ...
const battleEffect:DisplayObject =
逻 playOnce(moviecache,battleeffectpath,function():void
辑
{
const battleCtrl:BattleCtrl = new BattleCtrl();
代 battleCtrl.addEventListener(Event.CLOSE,
码
function(event:Event):void
{
callback();
})
battleCtrl.initialize(move.new_position,
creature,creatureData);
});
});
});
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 8. 为 什么 要用 HSM ?
状
态
机
风
格
的
逻
辑
代
码
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 9. 为 什么 要用 HSM ?
层
级
状
态
机
(
HSM
)
的
逻
辑
代
码 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 10. 为 什么 要用 HSM ?
1. 行走结束,等待玩家操作
a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并
结束交互逻辑。
b. 玩家点击一张可用占地卡且无需消耗额外卡牌,那么放
置该占地生物并结束交互逻辑。
c. 玩家点击一张可用占地卡切勿要消耗额外卡牌,那么等
待玩家点击消耗的卡牌:
a. 玩家长时间不操作,超过时限,那么,跳过玩家操作
并结束交互逻辑
b. 玩家点击要消耗的卡牌,那么放置占地生物、两张卡
牌都消耗并结束交互逻辑。
c. 玩家点击取消按钮,那么,返回步骤 1.
d. 玩家点击刚才经过移动时经过的己方生物,弹出土地操
作菜单:
a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束
交互逻辑
b. 玩家点击取消按钮,那么,土地菜单消失,回到步骤 1.
c. 玩家选择潜在能力,并且该潜在能力可以直接使用,那么使
用潜在能力并结束交互逻辑
d. 玩家选择潜在能力,并且该潜在能力需要对另一玩家使用,
那么:
I. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结
束交互逻辑
II. 玩家点击玩家头像,那么使用潜在能力并结束交互逻辑
III.
交互逻辑描述和状态机结构一一对应
玩家在地图上点击玩家,那么使用潜在能力并结束交互逻
辑
IV. 玩家点击取消按钮,那么,返回步骤 1.
其他情形……
其他情形……
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 11. 什么 是 HSM ?
Hierarchical State Machines
层级状态机
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 12. 什么 是状态 机
• 状态机是有向图
– 状态节点
– 状态转移函数
• 状态转换函数
State(S) × Event(E) ->
Actions(A), State(S')
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 13. 状态图 vs 流程图
状态图 流程图
操作执 行过 程 线 节点
事件 线 无
状态 (等待下一事件) 节点 无
执 行分支 隐含在线中 条件节点
编 程模型 事件驱动 结构化
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 14. 什么 是 HSM
• 全称
– Hierarchical State Machines (层级状态机)
• 层级状态机 =
有限状态机 + Slave/Master 职责链
• 特别适用于游戏
– 交互逻辑
– AI
– 动作控制
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 15. hxhsm
Haxe 的 HSM 实现
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 16. hxhsm
特 • 简单:只需编写 PureMVC 五分之一的代码
点 • 规范:
– 策划:自动根据状态机定义绘制状态图
– 程序:自动生成程序代码;静态类型检查
– QA :提供基于状态机的录像
• 跨平台:
HTML5 、 Flash 、 Android 、 iOS 、 Window
s 、 Linux 、 Mac OS X
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 22. 广告
• 提供 VinyCross 引擎授权
• 招募创业伙伴
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
- 24. 参考
• 维基百科:内聚的类型
• PureMVC
• Haxe
• 维基百科:层级状态机
• 讲师 杨博(邮箱 ·Github·Google Code· 博客)
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有