使用Sprite来承载粒子有许多方便的地方,比如可以继承Sprite的x,y坐标以及alpha、scaleX和scaleY属性等,这样就对粒子的操纵比较简单,也可以实现很好的视觉效果,但在效率方面则有值得商榷的地方。我们知道ActionScript3.0的代码需要Flash Player中的AVM2执行,而Flash Player是基于矢量渲染的,任何Sprite或MovieClip的位移、变型以及任何改变显示的变化都会使Flash Player对其进行绘制,并渲染到显示器。相比较而言,ActionScript3.0中的BitmapData可以先进行像素数据的操作,操作之后再进行渲染。并且无需Flash Player的绘制,直接将像素数据交给显示渲染。这样就会大大地提高效率,尤其对于数量庞大的粒子而言就更是如此了。
下面让我们讨论一下BitmapData粒子的实现方式。首先还是自定义一个粒子类,命名为Particle2D.as,源代码如下:
package com.particles{ public class Particle2D{ public var x:Number public var y:Number public var vx:Number public var vy:Number public var mass:Number public function Particle2D(particleX:Number = 0, particleY:Number = 0, speedX:Number = 0, speedY:Number = 0, pMass:Number = 1){ x = particleX y = particleY vx = speedX vy = speedY mass = pMass } public function update():void{ x += vx y += vy } } }
代码非常简单,只是定义了粒子的水平速度vx、垂直速度vy以及质量mass这几个基本属性。向它的构造函数传递水平位置、垂直位置、水平速度、垂直速度以及质量。在update函数中,也只是简单地在应用了水平速度和垂直速度以改变它的位置。
转载请注明:陈童的博客 » BitmapData粒子