`

纯AS3的RPG游戏可封装功能系统

阅读更多

(不考虑非共同点)
一、目标(1.流畅高效2.多对象3.资源压缩4.可扩展)
二、注意点
针对1的处理思想
1)放弃自带的MovieClip封装自己的动画类(带可变速的,由此可以做出类似魔兽里攻击速度变快动画变快的效果)。
2)内存的释放。做到无用则删。优化处理。当一个资源素材在没有被任何系统所使用时,可以给一个缓存时间,我的建议是一分钟,意思也就是说如果该资源在一分钟内仍然没有被任何系统所使用,那么可以释放掉该资源所占的内存。资源的释放:显示对象从舞台上删除,所有对该资源(或显示对象)的引用置空(null,如果存在bitmapData,还需要调用dispose方法进行释放)
3)多对象的处理相对来说就比较简单了,如果要高效的话,那么没有必要的话,尽可能的减少类,但这不是说压缩成一个类。比如一个按钮类。一个带文字背景的,一个是具有按钮功能的基类,那么没必要因为带文字背景的对象很多而重新写一个类去继承那个基类。像这种类似的我们可以采用一个静态类就可以了。为了保证游戏的流畅性,这里采用对象池的技术。可以让程序流畅一些。
4)资源的压缩当然是为了节约加载等待的时间所做的一些处理,比如按钮点击之后,变灰不再能被点击的效果,那么这个变灰的效果就可以由程序去处理了而不用再去加载一个灰色的图片。在我看来,加载一个图片放在内存里再去处理的效果未必就比用特效处理的要好。
5)可扩展性是为了方便他人使用的。其一是常用的接口,这个就不用多说了。其二就是类似回调函数。
三、可封装功能系统
1)资源加载。
2)图片处理(动画)
3)移动行走
4)对象拖拽
5)对象池
6)富文本(可选)
7)特效(可选)
8)背包的处理(可选)
四、优化
减少事件侦听。比如8的背包我们可以采用一个对象的侦听去监听所有的背包物品事件,而不要每个物品都添加一个侦听。所以,所有属于计时类型的事件都用一个事件去处理,这个可以参考TweenLite的事件侦听。这里建议延时函数(setTimeout)可以在这里由自己书写。另外不建议使用Timer,这个间隔实在是太差了。可以采用Event.EnterFrame事件处理。
 
分流处理。一般我们自己写的动画是作为位图处理来播放的,那么虚拟机在处理帧数较多的swf时也会卡机,这个时候可以采用分流的方式来减轻负荷,尽可能的减短卡机的时间。
 
补记:本人不喜欢自定义事件,其一是效率低,其二是还得侦听,流程貌似是清楚了,但是太不适合多对象的大型的MMORPG,所以我的项目里没有一个自定义事件。基本都是回调方法跟api里自带的事件。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics