当前位置:
文档之家› Flash-MMORPG游戏引擎及工具开发概述
Flash-MMORPG游戏引擎及工具开发概述
途径: DisplayObject.ENTER_FRAME: 特征:动作的执行以帧频为频率.每次执行必须最大程度保证当前帧的逻辑及渲染已经完成.(根据执行的情况 可能会出现丢帧显现) 适合于偏向渲染的心跳处理.如组件,可视对象涉及渲染的属性修改.等 Timer 特征:能自定义制定的时间间隔进行心跳处理而不依赖于帧频,但帧频的执行对其也有一定影响.执行的间隔 的准确度跟当然cpu消耗有直接关系. 适用于偏向逻辑型运算的心跳处理 setInterval 是一个封装好的Timer管理器.但没有实现群组,队列等功能的Timer的工厂模式实现. 于as2时的区别主要在于as2时setInterval只要事件间隔到,就会马上执行下一轮代码块, 而不管之前的代码块是否已经执行完毕. setTimeout 能在执行完制定次数后自动销毁的计数器,是基于setInterval 的一个实现扩展. 功能要求:能实现动态创建timer并对相应注册的指令进行操作. 对于相同心跳的指令进行群组共同注册到统一timer心跳下以减少timer数目增多导致的性能下降. 能进行 增,删,改,查,销毁等操作.根据实际需求还可以实现对同一对象下所有心跳频率的统一停止 开始,销毁等功能. 该部分功能特别适用对于管理场景下不同角色或怪物的速度,逻辑等
一个Message(信件)应由两部分组成即Head(信件头,标记信件的 通信类型,发信人,收信人等基本信息的载体)及Body(信件主体,通 信的行为逻辑,及回调等具体方式的Iorder接口的实现)
MODULE—模块
说明: 核心(引擎)开发的模块部分主要是为了解决 核心外或2次开发时不同功能组成的协调工作,而提供一种模板式开发方式. 并且封装及提供统一的通信模式
指令模式与as3的事件机制 的优势与区别:
1.事件机制传递一个事件, 需要放到事件流当中. 要一层接一层的封装事件. 然后通过实现了IEventDispatcher 接口 的对象将一个事件派发出去. 这个过程可能创建的实例很多.而且因为 要安插到事件流当中进行冒泡遍历.当注 册的事件越多消耗越大. 2.指令模式则是以预先封装好的方法及 回调方式组装成一个指令原型,通信过程 不需理会嵌套的层级数,直接对应用对原 型的方法进行回调,而且指令原型实例只 有相关的2个方法没有其他相关属性.不 像事件机制需要整个对象进行引用,再加 上生命周期结束后便可方便御载,销毁.
----事件,心跳管理中心
心跳管 理器 事件管 理器 指令通 信代理 指令管 理器
定义:由心跳指令及事件指令这两种实现了 IOrder接口的指令来作为 通信信息载体,并通过指令管代理进行注册分流.到其从属管理器 (心跳管理器,事件管理器)进行对循环或触发类交互的管理中心
特点: 1. 通信载体实现了共同的接口(Iorder) 2. 以回调机制取代事件机制的大部分功能.
职能管 理代理 A
职能管 理代理 C
• 从属管理器[c1] • 从属管理器[c2] • 从属管理器[b2] • 从属管理器[b2]
职能管 理代理 B 职能管 理代理 D
• 从属管理器[d1] • 从属管理器[d2]
事件心跳管理机制 ---------指令管理器
1.游戏核 心架构 设计
指令管理器(职能管理器)
对外通信: (核心外或2次开发)
1.模块间通信 2.模块内部通信 3.与服务端等外部程序间的通信
.模块通信管理:
对所有模块都将注册其中并 对 其进行管理,模块通过接口方 法send将信息发送模块管理器, ห้องสมุดไป่ตู้由模块管理器发送信件
信件指令 -----扩展命令模式的通信载体 Message=Head+Body
破解 playerglobal.swc的 SetIntervalTimer部分实现的代码
package flash.utils { import flash.events.*; final class SetIntervalTimer extends Timer { var id:uint; private var rest:Array; private var closure:Function; private static var intervals:Array = []; function SetIntervalTimer(closure:Function, delay:Number, repeats:Boolean, rest:Array) { super(delay, repeats ? (0) : (1)); this.closure = closure; this.rest = rest; addEventListener(TimerEvent.TIMER, this.onTimer); start(); this.id = intervals.length + 1; intervals.push(this); return; }// end function private function onTimer(event:Event) : void { this.closure.apply(null, this.rest); if (repeatCount == 1) { if (intervals[(this.id - 1)] == this) { delete intervals[(this.id - 1)]; } } return; }// end function static function clearInterval(id_to_clear:uint) : void { id_to_clear = id_to_clear - 1; if (intervals[id_to_clear] is ) { intervals[id_to_clear].stop(); delete intervals[id_to_clear]; } return; }// end function } }
特性:
1.有效地提高开发效率 2.有利于团队分工开发 3.有利于2次开发及扩展
定义:职能管理器是由一个或多个子管理器(子管理系统组成), 及一个通信代理组成.经由代理管理接受请求或回馈信息.
1.游戏核 心架构 设计
特点
1. 使用特定的通信协议,并经由唯一的进出 通道(通信代理)与外界进行通信. 2. 从属管理器以单例形式存在,并以特定的 • 从属管理器[a1] 命名空间进行封装. • 从属管理器[a2] 3. 基于相同的接口或子接口实现自身的通 信协议(命令)及对外访问方法
主题:
1.游戏核心 架构设计
2.游戏算 法与优化
3.辅助应 用工具
WEBGAME 核心(引擎)基础架构
核心(引擎)是由多个系统组成的共同体,每个系统都负责管理自己 专属的职能,系统间协调工作最终完成一项或多项功能(效果).
1.游戏核 心架构 设计
组成:
1.事件心跳机制(系统) 解决交互,互动等问题 2.对象管理机制(系统) 抽象对象,类架构 3.资源管理机制(系统) 各种资源或配置文件管理 4.通信管理机制(系统) 解决核心内外通信问题
事件管理器:
对核心的所有交互对象的事件侦听进行 强制注册,收集管理,并实现统一的注册,销毁等接口
对象回收注意: 1.保证该对象没有存在引用关系 ( 实例属性的要保证为null) 2.随意注册事件侦听(弱引用). 3.对象的任意引用
心跳管理器:
心跳:以一定的时间间隔为标注,间隔时间内调度一次的事件模式. 目的:更好更合理的对需要进行心跳的对象进行统一管理,且节省不必要的性能浪费.
创建指令
• 创建一个心跳指令/事件指令 • 经由指令管理器的唯一入口根据指令的类型对 指令进行注册分流 • 指令分流后到达心跳管理器或事件管理器后进 行相应的操作 • 根据注册的指令的相关定义或执行回调操作
注册指令
执行指令
回调
二.事件及心跳管理机制
AS3的事件机制(事件流三个阶段) Target.addEventListener(EventType.EVENT_NAME,eventResponse) 捕获阶段 该阶段包括从舞台到目 ,标节点的父节点范围内的所有点。 目标阶段: 该阶段仅包括目标节点. 冒泡阶段: 冒泡阶段包括从目标节点的父节点返回到舞台的行程中遇到的节点
模块间通信(ModuleToModule) 模块与服务端通信(ModuleToSevice) 模块内部的通信(SubModule--订阅式 通信) 模块-Moudle (MVC) 模块化开发
public interface IModule { function get view():IBaseSprite function set view(value:IBaseSprite):void function register(moduleName:String):void function send(message:IMessage):void function get proxy():IProxy }
心跳管理器: 基于与事件管理器相同统一的管理接口 对核心的所有交互对象的循环间隔调用进行 集中优化管理.
注意: 1.timer实例越少越好,相同间隔的轨到统一timer管理. 2.相同倍数的间隔timer,改用最小公倍数为间隔. 3.逻辑型心跳适用Timer实现,重绘型适宜用EnterFram 4.实现对象实例的所有心跳命令的统一分组,回收或暂停
public interface IOrder { function get execHandler():Function; function get callbackHandler():Function; function setUp(execHandler:Function,args:Array, callbackHandler:Function) }
通信管理机制 -------模块及系统间的通信
1.游戏核 心架构 设计