简单BitmapData粒子的实现

发了两个“说说BitmapData ”帖子之后,一些同学希望能提供源码 。这次我提供了另外一个例子的源码,代码 能很清晰的体现Bitmap Data粒子的基本做法。至于如何从这个基本结构发展成这样那样的效果 ,大家可以自己琢磨下。这里是演示,四万个粒子的自由落体。
http://www.ryan-liu.com/demo/particle/pixel_animation.html

源码中主要分三个部分,BitmapData操作,粒子运算,和之前还没提过的BitmapData特效。BitmapData的像素操作在
之前 介绍过。BitmapData特效我打算以后专门举例讲解,而且这块不难,大家看源码就能理解。这里就简单说说粒子。

粒子运算可以抽离为两个部分,粒子的运动计算和粒子群的管理。粒子的运动就是最基本的物理运动,速度,加速度,动力,阻力。源码中我给出了一个最最简单的二维粒子类,用这个类可以做简单的二维运动计算。

  1. package com.ryanliu.geom
  2. {
  3.         /**
  4.          * @author Ryan Liu | www.ryan-liu.com
  5.          * @since 2009-3-19 22:41
  6.          */
  7.         public class SimpleParticle2D
  8.         {
  9.                 public var x:Number
  10.                 public var y:Number
  11.                 public var vx:Number
  12.                 public var vy:Number
  13.                 public var mass:Number
  14.                
  15.                 public function SimpleParticle2D(particleX:Number = 0, particleY:Number = 0, speedX:Number = 0, speedY:Number = 0, pMass:Number = 1)
  16.                 {
  17.                         x = particleX
  18.                         y = particleY
  19.                         vx = speedX
  20.                         vy = speedY
  21.                         mass = pMass
  22.                 }
  23.                 public function update() {
  24.                         x += vx
  25.                         y += vy
  26.                 }
  27.         }
  28. }

这个类拥有最基本的五个属性 ,xy坐标,xy轴的速度vx,vy,和粒子的质量mass。质量不是必须的。但如果你想做一个生动的效果,还是留着它。不同的质量才会有不同的加速度嘛。本例中是一个最常规的运动——自由落体。

粒子群的管理也不是什么复杂的事儿,通常情况用数组 保 存,用for来遍历操作就好了。需要注意的是,因为粒子数量是灰常大的,所以粒子计算时有丁点儿不够优化的地方,对执行效率的影响也会很大。有人问过不做 lock和unlock好像执行起来也没影响性能,那是因为操作量不够大。本例里,在600x450的BitmapData上画40000个粒子,你可以 清楚的看出锁和不锁的差别。

你可能感兴趣的:(简单BitmapData粒子的实现)