ActionScript通用开发框架

   ActionScript 3(简称as)自2006年诞生以来,出现了一大批很优秀框架。就我的知识领域,运用包括pureMVC、pushButton Engine(组件框架)、Robotlegs、Ash等等。我将对这几个通用的开发框架进行一个较深入的总结。同时下文的种种判断、结论可能不完全正确,完全限于个人的思考、理解得到的。运用框架让开发效率更高,扩展性好,可维护。理解框架让框架的作用发挥极致,开发挥洒自如!
  

       1 PureMVC

  
       PureMVC很多人应该很熟悉,记得那时候as的开发框架还是很少的,这种基于mvc的框架对于as来说很实用的,as是客户端语言,处理大量视图逻辑,提供了机制去解决视图和控制器间的低耦合。既然是开发框架,我从几个方面去分析它。
  

       > 框架机制:PureMVC几个核心的类组成:Facade(外观),Proxy(模型代理),Mediator(中介器),Command(控制器)。Facade是整个框架的核心,包括mediator、command、proxy全部由它管理。框架大量采用单例,包括Facade本身。mediator是视图的代理器,负责和view打交道,view本身只提供一个ui布局,逻辑控制处理全部在mediator中完成。command提供一种命令模式,单独处理一项逻辑事务,并且这种对应是可以配置,即使用一个命令名称对应一个命令体。这样将整个控制逻辑简单化,单一化模块化,便于替换,更新维护。proxy是数据模型的代理,一般情况我们会设计vo,就是特定的数据模型结构(data struct),然后使用proxy进行代理。整个框架静态分析下来就是这样的了,至此我们还没有分析框架的事件流,没有这个无法进行逻辑控制,协作处理。PureMVC采用了另一种设计模式,观察者模式,这里就涉及到观察者、通知者、消息。观察者就是对象的一个消息处理方法,通知者自然就是发送消息,消息又包括消息名称、内容等。消息发送是通过Facade进行的。Facade提供了机制,在mediator、commnad被注册时进行了消息名称+处理句柄的关联。所以当通过Facade发送消息的时候,将查找这种关联,并让那些observer观察者(meditor、command)进行响应。
  

       > 有图有真相,看看框架示意图更加清晰点


  
  
       > 运用与优缺分析
  

       第一步,继承Facade,实现自己的外观,进行数据模型代理、控制器、中介器的安装。设计数据模型(vo),完成对数据模型vo的proxy。安装视图组织设计对应的mediator,完成视图事件处理句柄和控制逻辑。划分逻辑,将不同的处理逻辑封装在不同的command中。
  

       pureMVC优点体现在:轻量级的库、简单易用、极大降低耦合度,独立不依赖第三方库。可以很好的协调人员进行mvc模式开发。就当前的框架而言,由于Facade是单例的,在多模块协作会出现问题。一个解决方案是让Facade在不同的包下。当然pureMVC提供了多核版本,这里就不进行讨论了。
  

       2 PushButton Engine(组件框架)
  

       pushButton其实是一个 游戏engine,这里我列出来,是因为pushButton里面使用了一种基于组件的开发模式。按着设计者的初衷,一个游戏的设计,抛弃复杂的继承(因为继承本身也有诸多弊端,在复杂的游戏世界里),而采用一种“平铺”的方式,整个系统采用实体+组件完成。这个engine是比较复杂的,至今我的理解也不深入。如果是详细的讨论整个engine的开发流程,必须单独写一篇了。
  

       > 框架机制:一切皆组件。pushButton包括几个核心类:entity(实体)、component(组件)、template(模板)、group(组)。entity就是一个对象,比如角色、npc,是个抽象的对象。entity总是由component组成,各个component负责不同部分,比如有的是渲染,空间属性,数据模型等。template理解为可以多次初始化创建的entity。group是一组对象的集合,当group被创建的时候,group的子节点objectReference对应的实体等也会被初始化创建。
   
         pushButton提供了查找、访问别的组件的接口,同时提供了一个共享的eventDispatcher,实现消息事件的传递。如果深入去研究,有LevelManager(负责关卡的具体初始化工作)、NameManager(负责名称和类对象索引)、TemplateManager(负责加载卸载关卡文件,和序列化控制)等。
  

       > 框架示意图


  
  

        查看大图: Go,右键另存为即可。
  
      > 运用与优缺分析
  

      pushButton engine提供了基于XML配置文件的方法加载读取游戏,特别是关卡类游戏。一切基于组件! 在设计的时候,划分好不同的entity,然后分别设计不同的component。如果使用配置,必须写明objectReference,以完成初始化工作。如果使用手动,需要手动给entity添加不同的component,并手动实现整个流程。pushButton提供了屏幕管理类,方便视图间的切换,继承BaseScreen,实现自定义的screen。pushButton api很丰富,提供了很多公用组件模块。对应大的项目可以考虑发布一下组件,让多人提供协作开发。
  

       pushButton的api相对比较复杂,engine核心控制逻辑也需要深入学习才能弄懂!对应这样一个engine,学习成本相对是较高的,稳定性方面也可能存在风险。
  

       3 Robotlegs
  

       robotlegs框架对我而言,很熟悉了。我们的整个项目ui部分完全是基于这个开发的,我还看到过有人使用robotlegs开发出了完整的大型rpg游戏。robotlegs本质上还是mvc类型框架。不过robotlegs使用了依赖注入的方式降低对象间的耦合,简单的说对象间的相互引用是通过robotlegs框架完成的,同时robotlegs提供了更好的通信机制,和更低的耦合性。
  

       > 框架机制:robotlegs本质上也是使用mvc框架机制。包括:Actor(数据模型)、mediator(中介器)、command(控制器)、context(上下文)。整个框架的核心是依赖注入。context中负责完成几个映射的初始化工作,包括控制器、中介器、视图的映射。同时还包括对注入器的初始化工作。并且context里面还提供了一个事件派发器eventDispatcher。actor就是model部分,对应自定义数据模型一般继承actor,事件数据模型更新是派发事件通知给meditor和command。mediator提供对view的中介,负责处理和view的交互,发生消息命令。mediator被注入了meditorMap,可以实现新的视图中介器关联。
   
         command即是控制器部分,负责处理特定的逻辑块。需要说明的是command被注入了commandMap、meditorMap、eventDispatcher,还有injector。这些对象提供了command更加广阔的能力,包括发送事件、映射新的命令关联、新的视图中介器关联。最后就是mvcs中的“s”,s即是service,提供获取外部数据的服务功能。本质上将robotlegs、pureMVC是一个东西,最大的区别是依赖注入、事件派发机制。
  

       > 框架示意图


  
  

        事件流参看Robotlegs官网: Go
  
       > 运用与优缺分析
  

       robotlegs的具体运用和pureMVC很像。继承context设计自己的context,完成数据模型、视图、命令体映射等工作。设计基于actor的数据模型,当模型属性改变时派发事件。完成视图组织对应的mediator,安装好视图事件处理句柄,和处理逻辑。设计完成特定处理的命令体。注意的是依赖注入是框架自己完成的,并且注入点可以使用接口。
  

       robotlegs的优势可见一斑:轻量级的库、简单易用、极大降低耦合度。耦合度比pureMVC做的更彻底。并且依赖注入是可配置的。同时,我认为robotlegs的事件机制更高效,简单易懂,整个框架通过eventDispatcher对象进行收发。对于劣势可能是在于使用成本方面,由于引用依赖注入,框架要复杂很多。同时对于不需要开发大量视图交互的游戏,就没有这个优势了。http://www.shengshiyouxi.com
  

       4 Ash


         Ash是richardlord在2012设计的框架,借助这个框架richardlord开发了一个太空大战游戏,让我看到一个新的设计框架的诞生。实体系统现在正变得越来越受欢迎,有名的例子比如Unity。当然Ash现在很简陋,还不成熟,相信richardlord能做的更好!
  
       > 框架机制:“实体系统结构来源于解决游戏主循环这个问题的一次尝试。它将游戏主循环作为整个游戏的核心,并且预先假设在现代游戏结构中,简化游戏主循环比其他任何方面都重要,比如,它比分离控制器上的视角重要的多”。这是这个框架的出发点,简化游戏主循环。在ash中,最终游戏的主循环控制完全通过迭代system的update方法实现。ash包括几个核心类:entity(实体)、component(组件)、node(节点)、system(系统)。entity对应任何游戏都是存在的,可以理解为游戏中一个用例,一个组成对象,比如太空飞船。component理解为entity的不同部分,飞船可以分为渲染、数据模型、碰撞检测、控制组件等。system可以理解为处理具体一组抽象的针对node节点的逻辑。node是为system服务的,因为一般来说系统不关注具体的entity,而是关注一组特定的节点。节点又是由特定的组件构成的。本质上讲node提供了特定或者抽象的entity的组件的访问。system通过处理特定的node,实现处理对应的entity的组件,而组件对应一个entity来说,是共享传递的,从而实现逻辑处理。
  

       > 框架示意图


  
  
      > 运用与优缺分析
  

       Ash提供了Game类,使用时考虑给Game添加处理系统即可。一般会先划分不同entity,以及添加各自对应的component类。处理逻辑有先后顺序,决定了添加system到Game时有顺序安排,通过划分逻辑处理层次,将设计不同的system的扩展类,同时设计出配合system处理的node类。node类本质上是收集对entity的component的访问。整个游戏结构一目了然!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
actionScript 3.0开发人员指南中文版,总共67章,955页。学习actionScript不错的书籍。 目录: 目录 第章:使用日期和时间 管理日历日期和时间 控制时间间隔 日期和时间示例:简单模拟时钟 第章:使用字符串 字符串基础知识 创建字符串 length属性 处理字符串中的字符 比较字符串 获取其他对象的字符串表示形式 连接字符串 在字符串中查找子字符串和模式 转换字符串的大小写 字符串示例:ASCII图表 第章:使用数组 数组基础知识 索引数组 关联数组 多维数组 克隆数组 扩展Array类 数组示例:播放列表 第章:处理错误 错误处理基础知识 错误类型 ActionScript中的错误处理 使用Flash运行时的调试版 在应用程序中处理同步错误 创建自定义错误类 响应错误事件和状态 比较错误类 处理错误示例:CustomErrors应用程序 第章:使用正则表达式 正则表达式基础知识 正则表达式语法 对字符串使用正则表达式的方法 正则表达式示例:Wiki解析程序 第章:使用XML XML基础知识 用于处理XML的EX方法 XML对象 XMLList对象 初始化XML变量 组合和变换XML对象 遍历XML结构 使用XML命名空间 XML类型转换 读取外部XML文档 在ActionScript中使用XML的示例:从Internet加载RSS数据 第章:使用本机JSON功能 JSONAPI概述 定义自定义JSON行为 第章:处理事件 事件处理基础知识 ActionScript事件处理与早期版本事件处理的不同之处 事件流 事件对象 事件侦听器 事件处理示例:闹钟 第章:使用应用程序域 第章:显示编程 显示编程的基础知识 核心显示类 显示列表方法的优点 使用显示对象 处理显示对象 对象动画 舞台方向 动态加载显示内容 显示对象示例:SpriteArranger 第章:使用几何结构 几何结构基础知识 使用Point对象 使用Rectangle对象 使用Matrix对象 几何形状示例:对显示对象应用矩阵转换 第章:使用绘图API 绘制API的基础 Graphics类 绘制线条和曲线 使用内置方法绘制形状 创建渐变线条和填充 将Math类与绘制方法配合使用 使用绘图API进行动画处理 绘制API示例:算法可视化生成器 绘图API高级用法 第章:使用位图 位图使用基本知识 Bitmap和BitmapData类 处理像素 复制位图数据 使用杂点功能制作纹理 滚动位图 利用mipmap处理 位图示例:带动画效果的旋转的月亮 位图图像的异步解码 第章:过滤显示对象 过滤显示对象的基础知识 创建和应用滤镜 可用的显示滤镜 筛选显示对象示例:FilterWorkbench 第章:使用PixelBender着色器 PixelBender着色器基础知识 加载或嵌入着色器 访问着色器元数据 指定着色器输入和参数值 使用着色器 第章:使用影片剪辑 影片剪辑基础知识 使用MovieClip对象 控制影片剪辑播放 使用ActionScript创建MovieClip对象 加载外部SWF文件 影片剪辑示例:RuntimeAssetsExplorer 第章:使用补间动画 补间动画基础知识 在Flash中复制补间动画脚本 合并补间动画脚本 描述动画 添加滤镜 将补间动画与其显示对象关联 第章:使用反向运动 反向运动的基础知识 IK骨架动画处理概述 获取有关IK骨架的信息 实例化IKMover并限制其移动 移动IK骨架 使用弹簧 使用IK事件 第章:在三维(D)环境中工作 D显示对象的基础知识 了解FlashPlayer和AIR运行时中的D显示对象 创建和移动D显示对象 将D对象投影到D视图上 示例:透视投影 执行复杂的D转换 通过三角形获得D效果 第章:文本使用基础知识 第章:使用TextField类 显示文本 选择和操作文本 捕获文本输入 限制文本输入 设置文本格式 高级文本呈现 使用静态文本 TextField示例:报纸风格的文本格式设置 第章:使用Flash文本引擎 创建和显示文本 处理FTE中的事件 设置文本格式 使用字体 控制文本 Flash文本引擎示例:新闻版面布局 第章:使用TextLayoutFramework TextLayoutFramework概述 使用TextLayoutFramework 使用TLF构建文本结构 使用TLF设置文本格式 使用TLF导入和导出文本 使用TLF管理文本容器 使用TLF启用文本选择、编辑和撤消 使用TLF处理事件 在文本内定位图像 第章:处理声音 声音处理基础知识 了解声音体系结构 加载外部声音文件 处理嵌入的声音 处理声音流文件 处理动态生成的音频 播放声音 加载和播放声音时的安全注意事项 控制音量和声相 处理声音元数据 访问原始声音数据 捕获声音输入 声音示例:PodcastPlayer 第章:使用视频 视频基础知识 了解视频格式 了解Video类 加载视频文件 控制视频播放 在全屏模式下播放视频 流式传输视频文件 了解提示点 编写元数据和提示点的回调方法 使用提示点和元数据 监控NetStream活动 视频文件的高级主题 视频示例:视频自动唱片点唱机 使用StageVideo类来实现硬件加速呈现 第章:使用摄像头 了解Camera类 在屏幕上显示摄像头内容 设计摄像头应用程序 连接至用户的摄像头 验证是否已安装摄像头 检测摄像头的访问权限 最优化摄像头视频品质 监控摄像头状态 第章:使用数字权限管理 了解受保护的内容工作流程 NetStream类中与DRM相关的成员和事件 使用DRMStatusEvent类 使用DRMAuthenticateEvent类 使用DRMErrorEvent类 使用DRMManager类 使用DRMContentData类 更新FlashPlayer以支持FlashAccess 带外许可证 域支持 使用域支持播放加密的内容 许可证预览 提交内容 OpenSourceMediaFramework 第章:在AIR中添加PDF内容 检测PDF功能 加载PDF内容 编写PDF内容的脚本 对AIR中的PDF内容的已知限制 第章:用户交互的基础知识 捕获用户输入 管理焦点 了解输入类型 第章:键盘输入 捕获键盘输入 使用IME类 虚拟键盘 第章:鼠标输入 捕获鼠标输入 鼠标输入示例:WordSearch 第章:触摸、多点触控和手势输入 触摸输入的基础知识 触摸支持发现 Touch事件处理 触摸和拖动 Gesture事件处理 疑难解答 第章:复制和粘贴 复制粘贴基础知识 读取和写入系统剪贴板 AIR中的HTML复制和粘贴 剪贴板数据格式 第章:加速器输入 检查加速计支持 检测加速计更改 第章:AIR中的拖放 AIR中拖放的基础知识 支持拖出手势 支持拖入手势 HTML中的拖放 将数据拖出HTML元素 将数据拖入HTML元素 示例:覆盖默认的HTML拖入行为 在非应用程序HTML沙箱中处理文件放置 放置文件释放 第章:使用菜单 菜单基础知识 创建本机菜单(AIR) 关于HTML中的上下文菜单(AIR) 显示弹出本机菜单(AIR) 处理菜单事件 本机菜单示例:窗口和应用程序菜单(AIR) 第章:AIR中的任务栏图标 关于任务栏图标 停靠栏图标 系统任务栏图标 Window任务栏图标和按钮 第章:使用文件系统 使用FileReference类 使用AIR文件系统API 第章:存储本地数据 共享对象 加密的本地存储区 第章:在AIR中使用本地SQL数据库 关于本地SQL数据库 创建和修改数据库 操作SQL数据库数据 使用同步和异步数据库操作 对SQL数据库使用加密 使用SQL数据库的策略 第章:使用字节数组 读取并写入ByteArray ByteArray示例:读取zip文件 第章:网络和通信基础知识 网络接口 网络连接更改 域名系统(DNS)记录 第章:套接字 TCP套接字 UDP套接字(AIR) IPv地址 第章:HTTP通信 加载外部数据 Web服务请求 在其他应用程序中打开URL 第章:与其他FlashPlayer和AIR实例通信 关于LocalConnection类 在两个应用程序之间发送消息 连接到不同域中的内容和AIR应用程序 第章:与AIR中的本机进程通信 本机进程通信概述 启动和关闭本机进程 与本机进程通信 本机进程通信的安全性注意事项 第章:使用外部API 使用外部API的基础知识 外部API要求和优点 使用ExternalInterface类 外部API示例:在ActionScript和Web浏览器中的JavaScript之间进行通信 第章:AIR中的XML签名验证 XML签名验证的基础知识 关于XML签名 实现IURIDereferencer接口 第章:客户端系统环境 客户端系统环境基础知识 使用System类 使用Capabilities类 功能示例:检测系统功能 第章:AIR应用程序的调用和终止 应用程序调用 捕获命令行参数 用户登录时调用AIR应用程序 从浏览器调用AIR应用程序 应用程序终止 第章:处理AIR运行时和操作系统信息 管理文件关联 获取运行时版本和修补级别 检测AIR功能 跟踪用户当前状态 第章:使用AIR本机窗口 AIR中的本机窗口的基础知识 创建窗口 管理窗口 侦听窗口事件 显示全屏窗口 第章:AIR中的显示屏幕 AIR中的显示屏幕的基础知识 枚举屏幕 第章:打印 打印基础知识 打印页面 Flash运行时任务和系统打印 设置大小、缩放和方向 高级打印技术 打印示例:多页面打印 打印示例:缩放、裁剪和响应 打印示例:页面设置和打印选项 第章:Geolocation 检测geolocation更改 第章:应用程序国际化 应用程序国际化基础知识 flashglobalization包概述 确定区域设置 设置数字格式 设置货币值格式 设置日期和时间格式 排序和比较字符串 大小写转换 示例:国际化股票报价应用程序 第章:本地化应用程序 选择区域设置 本地化Flex内容 本地化Flash内容 本地化AIR应用程序 对日期、时间和货币进行本地化 第章:关于HTML环境 HTML环境概述 AIR和WebKit 第章:在AIR中进行HTML和JavaScript编程 关于HTMLLoader类 避免与安全相关的JavaScript错误 通过JavaScript访问AIRAPI类 关于AIR中的URL 使ActionScript对象可用于JavaScript 从ActionScript访问HTMLDOM和JavaScript对象 在HTML中嵌入SWF内容 在HTML页中使用ActionScript库 转换Date和RegExp对象 从ActionScript操作HTML样式表 跨脚本访问不同安全沙箱中的内容 第章:为AIRHTML容器编写脚本 HTMLLoader对象的显示属性 滚动HTML内容 访问HTML历史记录列表 设置在加载HTML内容时使用的用户代理 设置用于HTML内容的字符编码 为HTML内容定义类似于浏览器的用户界面 创建HTMLLoader类的子类 第章:处理AIR中与HTML相关的事件 HTMLLoader事件 使用ActionScript处理DOM事件 响应未捕获的JavaScript异常 使用JavaScript处理运行时事件 第章:在移动应用程序中显示HTML内容 StageWebView对象 内容 导航事件 历史记录 焦点 位图捕获 第章:安全性 FlashPlatform安全概述 安全沙箱 权限控制 限制网络API 全屏模式安全性 加载内容 跨脚本访问 作为数据访问加载的媒体 加载数据 从导入到安全域的SWF文件加载嵌入内容 使用旧内容 设置LocalConnection权限 控制外出URL访问 共享对象 摄像头、麦克风、剪贴板、鼠标和键盘访问 AIR安全性 第章:如何使用ActionScript示例 示例类型 在FlashProfessional中运行ActionScript示例 在FlashBuilder中运行ActionScript示例 在移动设备上运行ActionScript示例 第章:本地数据库中的SQL支持 支持的SQL语法 数据类型支持 第章:SQL错误详细消息、ID和参数 第章:Adobe图形汇编语言(AGAL) AGAL字节码格式
目录 第 1 章 : 使用日期和时间 第 2 章 : 使用字符串 第 3 章 : 使用数组 第 4 章 : 处理错误 第 5 章 : 使用正则表达式 第 6 章 : 使用 XML 第 7 章 : 使用本机 JSON 功能 第 8 章 : 处理事件 第 9 章 : 使用应用程序域 第 10 章 : 显示编程 第 11 章 : 使用几何结构 第 12 章 : 使用绘图 API 第 13 章 : 使用位图 第 14 章 : 过滤显示对象 第 15 章 : 使用 Pixel Bender 着色器 第 16 章 : 使用影片剪辑 第 17 章 : 使用补间动画 第 18 章 : 使用反向运动 第 19 章 : 在三维 (3D) 环境中工作 第 20 章 : 文本使用基础知识 第 21 章 : 使用 TextField 类 第 22 章 : 使用 Flash 文本引擎 第 23 章 : 使用 Text Layout Framework 第 24 章 : 处理声音 第 25 章 : 使用视频 第 26 章 : 使用摄像头 第 27 章 : 使用数字权限管理 第 28 章 : 在 AIR 中添加 PDF 内容 第 29 章 : 用户交互的基础知识 第 30 章 : 键盘输入 第 31 章 : 鼠标输入 第 32 章 : 触摸、多点触控和手势输入 第 33 章 : 复制和粘贴 第 34 章 : 加速计输入 第 35 章 : AIR 中的拖放 第 36 章 : 使用菜单 第 37 章 : AIR 中的任务栏图标 第 38 章 : 使用文件系统 第 39 章 : 存储本地数据 第 40 章 : 在 AIR 中使用本地 SQL 数据库 第 41 章 : 使用字节数组 第 42 章 : 网络和通信基础知识 第 43 章 : 套接字 第 44 章 : HTTP 通信 第 45 章 : 与其他 Flash Player 和 AIR 实例通信 第 46 章 : 与 AIR 中的本机进程通信 第 47 章 : 使用外部 API 第 48 章 : AIR 中的 XML 签名验证 第 49 章 : 客户端系统环境 第 50 章 : AIR 应用程序的调用和终止 第 51 章 : 处理 AIR 运行时和操作系统信息 第 52 章 : 使用 AIR 本机窗口 第 53 章 : AIR 中的显示屏幕 第 54 章 : 打印 第 55 章 : Geolocation 第 56 章 : 应用程序国际化 第 57 章 : 本地化应用程序 第 58 章 : 关于 HTML 环境 第 59 章 : 在 AIR 中进行 HTML 和 JavaScript 编程 第 60 章 : 为 AIR HTML 容器编写脚本 第 61 章 : 处理 AIR 中与 HTML 相关的事件 第 62 章 : 在移动应用程序中显示 HTML 内容 第 63 章 : 安全性 第 64 章 : 如何使用 ActionScript 示例 第 65 章 : 本地数据库中的 SQL 支持 第 66 章 : SQL 错误详细消息、 ID 和参数 第 67 章 : Adobe 图形汇编语言 (AGAL)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值