hxhsm取代 MVC 的状态机框架                       杨博 @ 葡萄藤Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
目录     • 为什么要用 HSM ?     • 什么是 HSM ?     • Haxe 的 HSM 实现—— hxhsm       Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
为 什么 要用 HSM ?Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
为 什么 要用 HSM ?网    • 显示页      – Flash Player 已经封装了底层操作游      – UI 框架成熟戏最    • 网络难      – 多种成熟解决方案的        • Protobuf 、 AMF…...
为 什么 要用 HSM ?策    1. 行走结束,等待玩家操作       a. 玩家长时间不操作,超过时限,那么,跳过玩家操作并结束交互逻辑。划      b. 玩家点击一张可用占地卡且无需消耗额外卡牌,那么放置该占地生物并结描      ...
为 什么 要用 HSM ?     class WalkCompleteCommand extends Command面    {       public static const STATE_WAIT:String = "wait";向  ...
为 什么 要用 HSM ?      const effect1:DisplayObject =异         playOnce(movieCache,effectPath,function():void步     {风        co...
为 什么 要用 HSM ?状态机风格的逻辑代码       Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
为 什么 要用 HSM ?层级状态机(HSM)的逻辑代码      Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
为 什么 要用 HSM ?1.   行走结束,等待玩家操作     a.   玩家长时间不操作,超过时限,那么,跳过玩家操作并          结束交互逻辑。     b.   玩家点击一张可用占地卡且无需消耗额外卡牌,那么放        ...
什么 是 HSM ?Hierarchical State Machines        层级状态机  Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
什么 是状态 机• 状态机是有向图 – 状态节点 – 状态转移函数• 状态转换函数 State(S) × Event(E) -> Actions(A), State(S)               Copyright © 2013 深圳市葡萄...
状态图 vs 流程图               状态图             流程图操作执 行过 程       线               节点事件             线               无状态 (等待下一事件)  ...
什么 是 HSM• 全称  – Hierarchical State Machines (层级状态机)• 层级状态机 =    有限状态机 + Slave/Master 职责链• 特别适用于游戏  – 交互逻辑  – AI  – 动作控制   ...
hxhsm  Haxe 的 HSM 实现Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
hxhsm特       • 简单:只需编写 PureMVC 五分之一的代码点       • 规范:         – 策划:自动根据状态机定义绘制状态图         – 程序:自动生成程序代码;静态类型检查         – QA ...
hxhsm 用法步骤一 状态定义       Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
hxhsm 用法步骤一 状态定义       Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
hxhsm 用法步骤二 自动生成主程序       Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
hxhsm 用法步骤三 人工编写钩子       Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
hxhsm 用法步骤四           (完) 发布游戏       Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
广告     • 提供 VinyCross 引擎授权     • 招募创业伙伴      Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
One More Thing         事件录像         Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
参考     •   维基百科:内聚的类型     •   PureMVC     •   Haxe     •   维基百科:层级状态机     •   讲师 杨博(邮箱 ·Github·Google Code· 博客)          C...
Upcoming SlideShare
Loading in …5
×

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

1,066
-1

Published on

by atry

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,066
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
9
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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 深圳市葡萄藤网络科技有限公司 版权所有
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×