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

24
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有 hxhsm 取代 MVC 的状 机框架 杨博 @ 葡萄藤

Upload: tencent

Post on 05-Jul-2015

921 views

Category:

Technology


8 download

DESCRIPTION

by atry

TRANSCRIPT

Page 1: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

hxhsm

取代MVC的状 机框架态

杨博 @ 葡萄藤

Page 2: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

目录

• 什么要用为 HSM?

• 什么是 HSM?

• Haxe的 HSM ——实现 hxhsm

Page 3: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 要用为 么 HSM?

Page 4: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 要用为 么 HSM?

• 示显– Flash Player 已 封装了底 操作经 层– UI框架成熟

• 网络– 多 成熟解决方案种

• Protobuf、 AMF……

• 业务逻辑– 占用游 大部分代 量戏 码– 需要控制其他所有模 : 示、网 ……块 显 络– 不同于“ 域 ”领 逻辑

• 无法提取 正交的接口简单

网页游戏最难的是什么?

Page 5: Hxhsm——取代mvc的状态机框架

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.

其他情形……其他情形……

策划描述的交互逻辑

Page 6: Hxhsm——取代mvc的状态机框架

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; } // ...... } }}

面向对象风格的逻辑代码

Page 7: Hxhsm——取代mvc的状态机框架

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);

});

});

});

异步风格的逻辑代码

Page 8: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 要用为 么 HSM?

状态机风格的逻辑代码

Page 9: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 要用为 么 HSM?

层级状态机(H

SM

)的逻辑代码

Page 10: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 要用为 么 HSM?

1. 行走 束,等待玩家操作结a. 玩家 不操作,超 限,那么,跳 玩家操作并长时间 过时 过

束交互 。结 逻辑b. 玩家点 一 可用占地卡且无需消耗 外卡牌,那么放击 张 额

置 占地生物并 束交互 。该 结 逻辑c. 玩家点 一 可用占地卡切勿要消耗 外卡牌,那么等击 张 额

待玩家点 消耗的卡牌:击a. 玩家 不操作,超 限,那么,跳 玩家操作长时间 过时 过

并 束交互结 逻辑b. 玩家点 要消耗的卡牌,那么放置占地生物、 卡击 两张

牌都消耗并 束交互 。结 逻辑c. 玩家点 取消按 ,那么,返回步击 钮 骤 1.

d. 玩家点 才 移 的己方生物, 出土地操击刚 经过 动时经过 弹作菜 :单a. 玩家 不操作,超 限,那么,跳 玩家操作并 束长时间 过时 过 结

交互逻辑b. 玩家点 取消按 ,那么,土地菜 消失,回到步击 钮 单 骤 1.

c. 玩家 潜在能力,并且 潜在能力可以直接使用,那么使选择 该用潜在能力并 束交互结 逻辑

d. 玩家 潜在能力,并且 潜在能力需要 另一玩家使用,选择 该 对那么:

I. 玩家 不操作,超 限,那么,跳 玩家操作并长时间 过时 过 结束交互逻辑

II. 玩家点 玩家 像,那么使用潜在能力并 束交互击 头 结 逻辑III. 玩家在地 上点 玩家,那么使用潜在能力并 束交互图 击 结 逻

辑IV. 玩家点 取消按 ,那么,返回步击 钮 骤 1.

其他情形……

其他情形……

交互逻辑描述和状态机结构一一对应

Page 11: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 是么 HSM?

Hierarchical State Machines状 机层级 态

Page 12: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 是状 机么 态

• 状 机是有向态 图– 状 点态节– 状 移函数态转

• 状 函数态转换State(S) × Event(E) -> Actions(A), State(S')

Page 13: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

状 态图 vs 流程图

状态图 流程图操作 行 程执 过 线 点节事件 线 无状 (等待下一事件)态 点节 无

行分支执 含在 中隐 线 条件 点节程模型编 事件驱动 化结构

Page 14: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

什 是么 HSM

• 全称– Hierarchical State Machines ( 状 机)层级 态

• 状 机 层级 态 =有限状 机 态 + Slave/Master 职责链

• 特 适用于游别 戏– 交互逻辑– AI

– 作控制动

Page 15: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

hxhsm

Haxe 的 HSM 实现

Page 16: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

hxhsm

• :只需 写简单 编 PureMVC 五分之一的代码

• 范:规– 策 :自 根据状 机定 制状划 动 态 义绘 态图

– 程序:自 生成程序代 ;静 类型动 码 态 检查

– QA :提供基于状 机的 像态 录

• 跨平台:

HTML5 、 Flash 、 Android 、 iOS 、 Window

s 、 Linux 、 Mac OS X

特点

Page 17: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

hxhsm 用法

步骤一 状态定义

Page 18: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

hxhsm 用法

步骤一 状态定义

Page 19: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

步骤二 自动生成主程序

hxhsm用法

Page 20: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

步骤三 人工编写钩子

hxhsm用法

Page 21: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

hxhsm用法

(完)步骤四 发布游戏

Page 22: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

广告

• 提供 VinyCross 引擎授权

• 招募 伴创业伙

Page 23: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

One More Thing

事件录像

Page 24: Hxhsm——取代mvc的状态机框架

Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有

参考

• 基百科:内聚的类型 维

• PureMVC

• Haxe

• 基百科: 状 机维 层级 态

•   博( 箱讲师 杨 邮 ·Github·Google Code· 博客)