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