1.关于MovieClip和Sprite的鼠标事件,当不需要鼠标事件的时候将mouseEnabled和mouseChildren设为false. 不断的检测鼠标交互事件会消耗CPU,尤其是大量交互对象重叠的情况。
2.对于执行时间太长的非动画内容,优先选择计时器,而不是 Event.ENTER_FRAME 事件。
3.在 enterFrame 事件或 Timer 处理函数中,尽量减少对可导致重绘屏幕的显示对象外观的更改。
4.尽量减少补间动画,以节省更多的CPU处理。把MC给stop
5.场景里放入好多的子可视对象时,鼠标的滑动会导致cpu的狂飙;
原因主要在于fp内部在不停的遍历可视对象.你可能会用过或者知道可视对象都有这个方法getObjectsUnderPoint ()
它能够返回鼠标点下的可视对象列表 .这也是鼠标滑过时消耗高的原因所在.当然它更大的用途是用于辅助重绘的实现以及其他.
有什么方法可以降低这块的消耗呢?答案是有的;
每个可视对象都有两个属性
mouseChildren 跟mouseEnabled
mouseChildren的作用是确定对象的子项是否支持鼠标 而
mouseEnabled 的作用就在于 指定此对象是否接收鼠标消息。
恩很显然 mouseEnabled跟 mouseChildren就是决定对象是否可以侦听鼠标事件的关键所在;
事实也证明只要设置了这两个属性鼠标滑过的高消耗就减少了,那是因为但这两个属性都设置为false后 就不在归到遍历树的对象中去了,
当然你也发现折辱这两个属性的功能呢个一样虽然我们可以把这两个属性都设置为false,但这不就意味着我们要放弃鼠标侦听?要知道游戏里对鼠标点击,鼠标松开,鼠标滑等鼠标事件都是十分依赖的.
恩,这是事实,但我们却可以用别的方法来取代他们;取代现有提供的鼠标事件方法;
而我这里说的方法就是动态4叉树.相信了解的人都知道4叉树主要用于搜索,跟剔除.而且效率相当高
当然一个4叉树还不够,我们还需要一个碰撞检测的方法来辅助下,下边会说说原理.
(没有了解的可以去看看我这帖子http://wxsr.blogbus.com/logs/60788934.html)
我之所以采用动态4叉树除了它效率高之外还在于它可以忽略遮挡物,对,fp的鼠标事件必须要点击到可视对象中去,而且如果某可视对象注册了鼠标事件但如果他上边有另外一个可视对象遮挡住的话,那么它依然无法触发到事件,但动态4叉树却可以给我们解决掉这个游戏里紧要需求的问题.
综合wxsr 游戏效率优化