AS3

FLASH游戏开发CPU优化11条

FLASH平台优化的学习笔记,总结出一条一条总比看长篇大套的好,欢迎补充和指正,欢迎来9stg.com关注游戏那些事儿!

1.       FLASH PLAYER10.1 引入了两种减少CPU处理的功能,一个是睡眠模式,另一个是SWF内容位于屏幕之外是暂停和恢复该内容

2.       睡眠模式是暂停呈现并将Stage.frameRate设置成4fps, 之所以不是0,是让所有连接保持打开状态(NetStream, Socket和NetConnection)。之所以是4,是因为许多电话制造商采用此帧速率作为刷新率

3.       暂停和恢复,当内容位置屏幕之外时候(全部内容在屏幕之外),暂停SWF文件,位于屏幕之内时候恢复SWF,从而限制CPU使用量。

4.       导致SWF位于屏幕之外的两种情况是,第一,滚动页面,第二,在浏览器中切换到新的标签。前者hasPriority HTML 参数设置为 true的时候ActionScript 的执行不会被暂停,后者无论是设为TRUE和 FALSE SWF都会降低到2FPS。关于呈现,两种情况下都会被暂停。

5.       显示对象的冻结与解冻,对于显示对象一定要使用 REMOVED_FROM_STAGE 和 ADDED_TO_STAGE 事件进行冻结和解冻。意思是将显示对象从显示列表中移除的时候,其事件一定要移除。不移除则将继续执行事件,如ENTER_FRAME,这将会消耗CPU,影响效率。

6.       自动冻结,FLASH PLAYER10以及更高版本中,当遇到空帧的时候,自动执行冻结,无需手动remove监听

7.       Loader的冻结,flash player 9采用unload就行冻结,flash player10引入了一个新的方法unloadAndStop()进行冻结,该方法会卸载SWF文件,自动冻结SWF中的每个显示对象并强制运行垃圾回收。

8.       关于MovieClip和Sprite的鼠标事件,当不需要鼠标事件的时候将mouseEnabled和mouseChildren设为false. 不断的检测鼠标交互事件会消耗CPU,尤其是大量交互对象重叠的情况。

9.       对于执行时间太长的非动画内容,优先选择计时器,而不是 Event.ENTER_FRAME 事件。

10.   在 enterFrame 事件或 Timer 处理函数中,尽量减少对可导致重绘屏幕的显示对象外观的更改。

11.   尽量减少补间动画,以节省更多的CPU处理

标签: ,
85 枚回复

FLASH游戏开发内存优化13条

这篇算是读书笔记吧,边读边记,一来用简练语句分享,二来加深学习印象!关于内存优化总结了13条,欢迎交流指正!也欢迎常来9stg.com,关注游戏那些事儿!

1. 使用合适的显示对象,对于非交互的简单形状用Shape对象,对于不需要时间轴的交互式对象用Sprite,对于使用时间轴的动画用MovieClip,他们的内存使用量分别是236,412,440,可见shape很省内存

2. Number原始存储内存占8个字节,int,uint,Boolean,String均占4个字节, 关于赋值后作占内存,取决值赋的值

3. 对象的重复利用, 在FOR循环内new对象要小心,每次new都会增大内存。

4. 通过重复使用 BitmapData 对象可以节省更多的内存,即不同的bitmap公用一个bitmapdata

5. 重复使用相同对象的时候,可以考虑下对象池的应用

6. 垃圾回收运行时会不断检测出处于非活动状态的对象,大型项目中此进程会占用大量CPU,所以尽量重使用对象,不用的对象设置为NULL

7. 内存释放方面,为了确保被垃圾回收,首先保证该对象没有其他引用,然后移除监听,在然后设置为NULL。关于bitmapdata, 先用dispose 在设置为null

8. 在 Flash Player 10.1 中,对所有bitmapdata实例采用同一版本的bitmapdata, 大大节省了内存, 当bitmapdata数据发生变化的时候,内存中会建立一个新的bitmapdata实例

9. 尽量避免使用滤镜,当对显示对象使用滤镜的时候,内存中将创建两个位图,每个位图的大小都与显示对象相同。一个是显示对象的栅格化版本,一个是用于滤镜的位图

10. 当修改滤镜的属性的时候,内存中两个位图都将更新创建新的位图,会消耗一些CPU,并且会占用大量内存。

11. Flash Player 10.1 在所有平台上引入了一种新的过滤行为。如果滤镜在 30 秒内没有进行修改,或者将其隐藏或置于屏幕之外,将释放未过滤的位图占用的内存。该方式成为动态位图卸载。

12. 使用滤镜时仍要谨慎小心;在对它们进行修改时,仍要求大量 CPU 或 GPU 处理。

13. 如果想要滤镜效果,最好用PHOTOSHOP来做一个

标签:
45 枚回复

FLASH代码和呈现在帧上的表现

有时候会发现FLASH很卡的现象,或许与今天所写的有关

FLASH代码和呈现在帧上的表现
1. FLASH动画的形成,是围绕帧频不断渲染图形产生的
2. 帧的执行包括代码和呈现两部分
3. 对于每一帧会先执行代码后执行呈现
4. 代码执行时间加上呈现时间原则上应该在帧频所规定的时间内完成,这样动画很流畅
5. 在帧上所执行的代码和呈现时间超过帧频所定的时间怎么办?FLASH会在该帧继续分配多余的时间,于
是帧频自动降低,动画会变卡,游戏性能变差。

所以从代码和程序上优化,不要做过于复杂的操作让执行时间过长,导致游戏不流畅的现象!
参考文献 flashplatform_optimizing_content

标签:
37 枚回复

FLASH AS3 游戏开发 – 初学的建议

简单的学习游戏制作,不要想的太复杂,如果你学的是设计,编程思想基础不好,不妨从以下方面着手。

1. 最基础的东西, 了解下FLASH IDE,了解下文档类,简单的了解下类,对象的概念,无需深入面向对象的理解,可以在具体开发中慢慢理解面向对象。

2. 理解游戏中的可视化元素,映射到AS3游戏开发中来的其实就是显示对象编程,简单的说是如果游戏中没有显示对象,你什么都看不到。试图去理解MovieClip, Sprite,以及容器的概念。

3. 理解让可视化对象动起来的知识,比如想让飞机左右摆动,就像雷电,让游戏中的小人跳来跳去,就像超级玛丽。这些都需要的AS3知识是,鼠标与键盘事件,不需要学会自定义事件,只需要学会FLASH现有鼠标点击时间,键盘按下事件触发等知识。

有了可视化的东西,你又用鼠标键盘控制他们动了,这不就是游戏吗,就这么简单,从这两方面下手去入门游戏制作,慢慢就可以进阶。

ActionScript 3.0 game programming university 学习笔记

天地会首发,我的初学笔记

http://flash.9ria.com/thread-4734-1-1.html

标签:
66 枚回复

游手好学教程 – AS3实现飞机游戏角色的移动

最近做了一个纯俯视的射击类游戏,涉及到地图不规则边缘的碰撞检测,也在鼠标操作以及键盘操作飞机上犹豫了一下。现在分别做出鼠标和键盘的飞机操作做个比较,不知道大家偏好那种. 也放出源码和大家分享交流,代码很简单,我接触AS3不久,经验比较少,大家多多指点,共同进步啊。

游戏是纯俯视的,控制飞机,无论是键盘还是鼠标都会运用到三角函数的知识,分别计算出飞机在X轴和Y轴上的速度,然后在游戏的循环函数(ENTER_FRAME或者Timer)里面控制飞机在X轴和Y轴上的增加或者减少,原理大概就是这样的。

下面,先看看SWF演示吧,默认是键盘操作,方向键控制,点击相关按钮切换到鼠标操作,鼠标操作我这里做的其实就是一个简单的跟随.

阅读全文 »

标签:
46 枚回复