SlideShare une entreprise Scribd logo
1  sur  24
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 ?

层
级
状
态
机
(
HSM




)
的
逻
辑
代
码      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· 博客)



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

Contenu connexe

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

從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛John L Chen
 
component based html5 game engine
component based html5 game enginecomponent based html5 game engine
component based html5 game enginehbbalfred
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
为独立工作室构建跨平台引擎
为独立工作室构建跨平台引擎为独立工作室构建跨平台引擎
为独立工作室构建跨平台引擎Coconut Island
 
Introduction of Reverse Engineering
Introduction of Reverse EngineeringIntroduction of Reverse Engineering
Introduction of Reverse EngineeringYC Ling
 
AngularJS training in Luster
AngularJS training in LusterAngularJS training in Luster
AngularJS training in LusterJason Chung
 
腾讯大讲堂44 qq game后台开发介绍
腾讯大讲堂44 qq game后台开发介绍腾讯大讲堂44 qq game后台开发介绍
腾讯大讲堂44 qq game后台开发介绍George Ang
 
腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍PMCamp
 
腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍areyouok
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Fred Chien
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統Hsu Ping Feng
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)amd6400
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)amd6400
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺宗凡 楊
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺hydai
 
Graphic programming in js
Graphic programming in jsGraphic programming in js
Graphic programming in jsjay li
 
資工人的學習成長之路
資工人的學習成長之路資工人的學習成長之路
資工人的學習成長之路Murphy Chen
 

Similaire à Hxhsm——取代mvc的状态机框架 (20)

從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛
 
component based html5 game engine
component based html5 game enginecomponent based html5 game engine
component based html5 game engine
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
为独立工作室构建跨平台引擎
为独立工作室构建跨平台引擎为独立工作室构建跨平台引擎
为独立工作室构建跨平台引擎
 
Introduction of Reverse Engineering
Introduction of Reverse EngineeringIntroduction of Reverse Engineering
Introduction of Reverse Engineering
 
AngularJS training in Luster
AngularJS training in LusterAngularJS training in Luster
AngularJS training in Luster
 
腾讯大讲堂44 qq game后台开发介绍
腾讯大讲堂44 qq game后台开发介绍腾讯大讲堂44 qq game后台开发介绍
腾讯大讲堂44 qq game后台开发介绍
 
腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍
 
腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍腾讯大讲堂51 游戏产品运营事故案例介绍
腾讯大讲堂51 游戏产品运营事故案例介绍
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
 
Graphic programming in js
Graphic programming in jsGraphic programming in js
Graphic programming in js
 
資工人的學習成長之路
資工人的學習成長之路資工人的學習成長之路
資工人的學習成長之路
 
Tcfsh bootcamp day2
 Tcfsh bootcamp day2 Tcfsh bootcamp day2
Tcfsh bootcamp day2
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
六合彩
六合彩六合彩
六合彩
 

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

  • 1. hxhsm 取代 MVC 的状态机框架 杨博 @ 葡萄藤 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 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 深圳市葡萄藤网络科技有限公司 版权所有
  • 17. hxhsm 用法 步 骤 一   状 态 定 义 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 18. hxhsm 用法 步 骤 一   状 态 定 义 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 19. hxhsm 用法 步 骤 二   自 动 生 成 主 程 序 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 20. hxhsm 用法 步 骤 三   人 工 编 写 钩 子 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 21. hxhsm 用法 步 骤 四 (完)   发 布 游 戏 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 22. 广告 • 提供 VinyCross 引擎授权 • 招募创业伙伴 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 23. One More Thing 事件录像 Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
  • 24. 参考 • 维基百科:内聚的类型 • PureMVC • Haxe • 维基百科:层级状态机 • 讲师 杨博(邮箱 ·Github·Google Code· 博客) Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有