Posts Tagged ‘BitmapData’

BitmapData粒子再测试

效果在这里。图片被切割为8000个7 x 6 像素的粒子,用copyPixel的方式绘制到另一张BitmapData上。如果创建一系列alpha值0到255的bitmapData序列,作为copyPixel的参数,还可以实现透明渐变的效果。运动类使用了TweenNano

关键部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private function drawParticle():void {
            //bmd作为画布的bitmapData
            bmd.lock()
            bmd.colorTransform(bmd.rect, ctm);
            var op:Point = new Point();
            for (var i:int = 0; i < w; i++) {
                for (var j:int = 0; j < h; j++) {
                    //得到原图片相应位置的图块
                    op.x = i * bw;
                    op.y = j * bh;
                    //pArr为一个二维数组类,tp可看做一个Point,储存了当前图块应在的位置
                    var tp:SimpleParticle2D = pArr.get(i, j);
                    //从原图对应i,j的位置获得图块,复制到画布的新位置上
                    bmd.copyPixels(src, new Rectangle(op.x,op.y,bw,bh), new Point(tp.x, tp.y));
                }
            }
            bmd.unlock();
        }

Flurry光效(2)

自从上次开始之后一直比较忙,没有深入做下去。只做到了一个足够项目应用的程度。演示看这里

flurry light

Jazz Curve

Demo

thumb_lines

Flash火焰效果讲解

火焰只是基本的效果之一,柏林噪声+偏移滤镜,想像创造无限可能(很像广告语)。讲解请看这里

thumb_perlinfire

流体粒子60000

也做了个最近流行的流体粒子(需要Flash10播放器)。30fps下运算十万个左右的简单粒子是毫无问题的。例子里我只创建了60000个粒子,为了不让800×350的BitmapData太消耗资源而影响流畅度。我在这里还发现了wonderfl上粒子的发展关系图,蛮有意思。

thumb_fluid

BitmapData.draw做效果

这个例子是比较典型的BitmapData效果。实现很简单,只要你了解最基本的思路。例子中的Matrix变形的算法比较实用:

1
2
3
4
5
6
7
var transformMatrix:Matrix = new Matrix();
var incX:int = sw/40;
var incY:int = sh/40;
transformMatrix.a = (sw + incX)/sw;
transformMatrix.d = (sh + incY)/sh;
transformMatrix.tx = -incX/2;
transformMatrix.ty = -incY/2;

sw和sh是对象的宽和高,使对象可以沿中心点等比缩放。整个例子的讲解和源代码在这里

BitmapData draw

简单BitmapData粒子的实现

这里是一个简单的BitmapData粒子效果演示。40000个粒子的自由落体。感兴趣的同学可以下载源代码

本例主要展示了BitmapData粒子效果的最基本的三个步骤:粒子计算,BitmapData操作,BitmapData特效操作。BitmapData操作和BitmapData特效操作也是做其他位图效果必须的。粒子计算是独立的一块,并且是可以很很很深入的一块。为方便粒子计算,源码里我提供了一个最简单的二维粒子类,可以通过xy轴的坐标和速度,以及质量来做基本的物理运动计算。

BitmapData Particle

像素粒子

用像素来做粒子,得益于BitmapData的快速渲染,三万个粒子也一样流畅。

演示 细节讲解

pixel explode

空间带景深粒子升级版

上次的粒子效果做了一个改进版。显示都通过BitmapData操作,粒子的景深和透视变化预先做了100个BitmapData“缓存”。空间运动和排序的计算跟之前没有变化。最近刚刚在公司内部做完了BitmapData相关的培训,以后我会整理一下发到网上来。我在这里分享了本例的思路。

thumb_particle2