最近针对粒子效果
做了一些测试,把经验跟大家分享一下。
例1:http://www.ryan-liu.com/demo/particle/MassParticleGlobe.html
例2:http://www.ryan-liu.com/demo/par ... leGlobe_bitmap.html
一般做粒子效果有两个重点,一是视觉效果的实现,二是保证执行效率。两个例子都实现了视觉效果,但效率上例2领先很多。我们知道传统的矢量渲染模式下,任何元件的位移和变型以及任何改变显示的变化都会使得Flashplayer
对其进行绘制,并渲染到显示器。(Fl9以后有所优化,但改变不了根本)而BitmapData
可以先进行像素数据
的操作,操作之后在进行渲染。并且跳过FP的绘制,直接将像素数据交给显示渲染。
例1使用用sprite承载粒子的图像,运动时,根据粒子的z坐标来变换缩放,并施加模糊滤镜和调整colortransform加暗。例2预先生成了100个Bitmap
Data,放置同一个图像从原始状态到最远状态(缩小,模糊和加暗)的100个过渡状态。再有一个大的BitmapData作为“画布”绘制所有的例子。运动时通过粒子的z坐标换算,在100个BitmapData中找到相应的状态图像,然后在相应的坐标位置绘制到画布上。在绘制所有粒子前先将画布lock,这样绘制操作就不会触发FP的渲染,绘制后再unlock,FP将整个画布渲染到显示器。注意在绘制粒子时要使用copyPixels而不是draw方法,draw可以将任何可显示物体画在BitmapData上,甚是方便。但draw会对目标元件调用FP的传统绘制模式,不能达到对渲染的优化,即使你使用了lock。两个例子在空间运动和空间排序上都使用相同的算法
,因此能清楚的比较两种显示方式在效率上的不同。
以上为大致的思路。程序
上没有什么复杂的东西,主要是对BitmapData的掌握。希望能对大家有所帮助。