炸效果
2010-03-25 20:43 宝宝合凤凰 阅读(311) 评论(0) 收藏 举报图片爆炸效果
这个需求是昨天碰到的,怎么说呢,怪怪的,主要是想不出可以模拟爆炸效果的公式。
先来看Demo:
OK,接下去看下具体实现过程:
01.import gs.TweenLite; 02.import gs.easing.Bounce; 03.var img:TmpImage=new TmpImage(); 04.var bpd_source:BitmapData=new BitmapData(img.width,img.height,true,0); 05.bpd_source.draw(img); 06.  07.var blockSize:uint=3; 08.var numWidth:uint=Math.ceil(img.width/blockSize); 09.var numHeight:uint=Math.ceil(img.height/blockSize); 10.var numTotal:uint=numWidth*numHeight; 11.var pt:Point = new Point(0, 0); 12.var ary_blocks:Array=[]; 13.var sp:Sprite=new Sprite(); 14.init(); 15.function init() { 16.    btn1.txt.text="Explode"; 17.    btn2.txt.text="Recovery"; 18.    btn1.addEventListener(MouseEvent.CLICK,explode); 19.    btn2.addEventListener(MouseEvent.CLICK,recovery); 20.    sp.x=100; 21.    sp.y=90; 22.    addChild(sp); 23.    initBitmap(); 24.} 25.function initBitmap(){ 26.    for (var i:uint=0; i<numTotal; i++) { 27.        var bmd_tmp:BitmapData=new BitmapData(blockSize,blockSize,true,0); 28.        var rect:Rectangle = new Rectangle(blockSize*(i%numWidth), blockSize*int(i/numWidth), blockSize*(i%numWidth+1), blockSize*(int(i/numWidth)+1)); 29.        bmd_tmp.copyPixels(bpd_source, rect, pt); 30.        var bp:Bitmap=new Bitmap(); 31.        bp.bitmapData=bmd_tmp; 32.        bp.x=blockSize*(i%numWidth); 33.        bp.y=blockSize*int(i/numWidth); 34.        bp.name=String(i); 35.        sp.addChild(bp); 36.        ary_blocks.push(bp); 37.    } 38.} 39.function explode(_e:MouseEvent) { 40.    for each(var obj:Bitmap in ary_blocks) { 41.        TweenLite.to(obj,rand(0.6,1.2),{x:rand(-100,300),y:rand(-90,240),ease:Bounce.easeIn}); 42.    } 43.} 44.function recovery(_e:MouseEvent) { 45.    for each(var obj:Bitmap in ary_blocks) { 46.        TweenLite.to(obj,rand(0.6,1.2),{x:blockSize*(int(obj.name)%numWidth),y:blockSize*int(int(obj.name)/numWidth)}); 47.    } 48.} 49.function rand(_min:Number,_max:Number):Number { 50.    return Math.random() * (_max-_min) + _min; 51.}做法是先把图片转成Bitmap,然后嘛,把Bitmap分割成很多块BitmapData放入新的Bitmap,加入到显示容器里。
如果设置var blockSize=1,程序会直接崩溃哈哈。
在想办法把图片转换成点阵图,不过暂时没头绪,尝试了下Graphics来做,却不知道怎么拿到每个Point来位移=。=唉,还是不够了解Flash。。
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号