flash位图技术研究篇(7):像素粒子1

本文介绍了一种使用Flash技术创建动态位图粒子效果的方法。通过随机生成粒子,并利用位图数据进行绘制,实现了炫目的视觉效果。文章详细展示了粒子模型的设计及动画实现过程。

在wonderfl 网站当中,有很多创意的flash 程序,呈现的视角效果能够给予很高的启发性。今天,又要继续学习flash 技术,把在哪里看到的东西记录一下,这种位图应用可以变化出很多神奇的效果。一个像素可以当作一个微小的粒子处理,我们可以采用设置像素点位置的方式,对 空白的位图数据进行设置点,这些点会分布在位图上,呈现出色彩奔放的效果。

接下来,记录一下在哪里看到的程序。大部分过程都来源于哪里。仅仅改造了一些。提到粒子,我想到一个粒子模型,这个粒子模型是一个结构,暂时没有办法可以总结他出来,只是隐约有这样想法,粒子模型当中,可以包含坐标,角度,颜色值。等等设置。其他参数如下面。


//简单的粒子模型
internal class Particle
{
    public var x:Number;
    public var y:Number;
    public var radius:Number=0;//半径
    public var color:uint;//颜色
    public var vr:Number;
    public var angle:Number;

    public function Particle()
    {
       
    }
}



这个模型当中,我们会记录他的位置,颜色,和角度。这样一来,我们把他作为一个对象那样进行创建。

我们需要随机创建每一个像素粒子。如下

private function creatSprite():void
        {
            //创建多个像素点
            for (var i:int=0; i<300; i++)
            {
                var p:Particle=new Particle();
                p.vr=Math.random()*45;
                p.color=0xffffff;
                p.angle=Math.random()*2*Math.PI;
                particles.push(p);
            }
        }


设置他的角度,颜色 还是一些初始参数,这样下来我们借用setPixel(x,y,color);这个函数来设置每一个点了。看起来非常简单,用起来也很简单。但是有一点是,通过借鉴他的一种做法,我们了解到这些方法应用变化。

粒子创建完成,采用数组进行保存。进行动画过程。采用圆的分布方式设置动画,或者其他方式设置,这样的方式可以自由搭配。而这次我们则采用圆的方式进行。向中心散发。同样,在借鉴这个程序的时候,结合滤镜的应用,产生很多不错效果。看起来很酷。如下图:

效果图

代码清单:

package
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.PixelSnapping;
    import flash.display.BlendMode;

    import flash.events.*;
    import flash.geom.*;
    import flash.filters.*;

    public class Main extends Sprite
    {
        private var bmp:BitmapData=new BitmapData(550,400,false,0x000000);
        private var particles:Array=[];//粒子数组
        private var startX:Number;
        private var startY:Number;
        //private var pen:BitmapData=new BitmapData(1,1);
        public function Main()
        {
            init();
        }
        private function init():void
        {             
            var bitmap:Bitmap=addChild(new Bitmap(bmp)) as Bitmap;
            bitmap.blendMode=BlendMode.ADD;
             
            addEventListener(Event.ENTER_FRAME,Run);
            stage.addEventListener(MouseEvent.CLICK,onClick);
        }
        private function Run(event:Event):void
        {
            update();
        }
        private function onClick(event:MouseEvent):void
        {
            startX=mouseX;
            startY=mouseY;
            creatSprite();
        }
        //创建图形
        private function creatSprite():void
        {
            //创建多个像素点
            while(particles.length>0)particles.pop();
            for (var i:int=0; i<1000; i++)
            {
                var p:Particle=new Particle();
                p.vr=Math.random()*45;
                p.color=0xffffff;
                p.angle=Math.random()*2*Math.PI;
                particles.push(p);
            }
        }
        private function update():void
        {   bmp.lock();
            bmp.applyFilter(bmp,new Rectangle(0,0,stage.stageWidth,stage.stage.stageHeight),new Point(),new BlurFilter(2,2));
           
            for(var i:int=0;i<particles.length;i++)
            {
                var p:Particle=particles[i];
                p.vr*=0.8;
                p.radius+=p.vr;//递增他的半径
                p.x=startX+p.radius*Math.cos(p.angle);//按圆进行分布x坐标
                p.y=startY+p.radius*Math.sin(p.angle);//按圆的方式分布y坐标           
                bmp.setPixel(p.x,p.y,p.color);//设置像素点的位置           
            }           
            bmp.unlock();
            //pen.draw(bmp,new Matrix(0.25,0,0,0.25));
        }
    }
}

//简单的粒子模型
internal class Particle
{
    public var x:Number;
    public var y:Number;
    public var radius:Number=0;//半径
    public var color:uint;//颜色
    public var vr:Number;
    public var angle:Number;

    public function Particle()
    {
       
    }
}


小结:

这一篇文章,不足以说明位图结合效果的全部,在woderfl 网站里面包含很多有趣创意的程序,如果你是有心的flash 爱好者,一定不要错过那里。会学到很多知识,增加自己的见识。个人而言,会继续去学习那里的技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值