Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
Twitter bootstrap2.0 taste
Twitter bootstrap2.0 taste
Loading in …3
×
1 of 24

Hxhsm——取代mvc的状态机框架

4

Share

Download to read offline

by atry

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Hxhsm——取代mvc的状态机框架

  1. 1. hxhsm 取代 MVC 的状态机框架 杨博 @ 葡萄藤 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  2. 2. 目录 • 为什么要用 HSM ? • 什么是 HSM ? • Haxe 的 HSM 实现—— hxhsm Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  3. 3. 为 什么 要用 HSM ? Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  4. 4. 为 什么 要用 HSM ? 网 • 显示 页 – Flash Player 已经封装了底层操作 游 – UI 框架成熟 戏 最 • 网络 难 – 多种成熟解决方案 的 • Protobuf 、 AMF…… 是 什 • 业务逻辑 么 – 占用游戏大部分代码量 ? – 需要控制其他所有模块:显示、网络…… – 不同于“领域逻辑” • 无法提取简单正交的接口 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  5. 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. 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. 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. 8. 为 什么 要用 HSM ? 状 态 机 风 格 的 逻 辑 代 码 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  9. 9. 为 什么 要用 HSM ? 层 级 状 态 机 ( HSM ) 的 逻 辑 代 码 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  10. 10. 为 什么 要用 HSM ? 1. 行走结束,等待玩家操作 a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并 结束交互逻辑。 b. 玩家点击一张可用占地卡且无需消耗额外卡牌,那么放 置该占地生物并结束交互逻辑。 c. 玩家点击一张可用占地卡切勿要消耗额外卡牌,那么等 待玩家点击消耗的卡牌: a. 玩家长时间不操作,超过时限,那么,跳过玩家操作 并结束交互逻辑 b. 玩家点击要消耗的卡牌,那么放置占地生物、两张卡 牌都消耗并结束交互逻辑。 c. 玩家点击取消按钮,那么,返回步骤 1. d. 玩家点击刚才经过移动时经过的己方生物,弹出土地操 作菜单: a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束 交互逻辑 b. 玩家点击取消按钮,那么,土地菜单消失,回到步骤 1. c. 玩家选择潜在能力,并且该潜在能力可以直接使用,那么使 用潜在能力并结束交互逻辑 d. 玩家选择潜在能力,并且该潜在能力需要对另一玩家使用, 那么: I. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结 束交互逻辑 II. 玩家点击玩家头像,那么使用潜在能力并结束交互逻辑 III. 交互逻辑描述和状态机结构一一对应 玩家在地图上点击玩家,那么使用潜在能力并结束交互逻 辑 IV. 玩家点击取消按钮,那么,返回步骤 1. 其他情形…… 其他情形…… Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  11. 11. 什么 是 HSM ? Hierarchical State Machines 层级状态机 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  12. 12. 什么 是状态 机 • 状态机是有向图 – 状态节点 – 状态转移函数 • 状态转换函数 State(S) × Event(E) -> Actions(A), State(S') Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  13. 13. 状态图 vs 流程图 状态图 流程图 操作执 行过 程 线 节点 事件 线 无 状态 (等待下一事件) 节点 无 执 行分支 隐含在线中 条件节点 编 程模型 事件驱动 结构化 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  14. 14. 什么 是 HSM • 全称 – Hierarchical State Machines (层级状态机) • 层级状态机 = 有限状态机 + Slave/Master 职责链 • 特别适用于游戏 – 交互逻辑 – AI – 动作控制 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  15. 15. hxhsm Haxe 的 HSM 实现 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  16. 16. hxhsm 特 • 简单:只需编写 PureMVC 五分之一的代码 点 • 规范: – 策划:自动根据状态机定义绘制状态图 – 程序:自动生成程序代码;静态类型检查 – QA :提供基于状态机的录像 • 跨平台: HTML5 、 Flash 、 Android 、 iOS 、 Window s 、 Linux 、 Mac OS X Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  17. 17. hxhsm 用法 步 骤 一   状 态 定 义 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  18. 18. hxhsm 用法 步 骤 一   状 态 定 义 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  19. 19. hxhsm 用法 步 骤 二   自 动 生 成 主 程 序 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  20. 20. hxhsm 用法 步 骤 三   人 工 编 写 钩 子 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  21. 21. hxhsm 用法 步 骤 四 (完)   发 布 游 戏 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  22. 22. 广告 • 提供 VinyCross 引擎授权 • 招募创业伙伴 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  23. 23. One More Thing 事件录像 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  24. 24. 参考 • 维基百科:内聚的类型 • PureMVC • Haxe • 维基百科:层级状态机 • 讲师 杨博(邮箱 ·Github·Google Code· 博客) Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

×