图片爆炸效果

这个需求是昨天碰到的,怎么说呢,怪怪的,主要是想不出可以模拟爆炸效果的公式。
先来看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。。

您可以尝试使用CSS3和JavaScript来实现这个效果。具体步骤如下: 1. 首先,您需要准备一张图片,并在HTML页面中添加一个<img>元素来显示它。 2. 接下来,使用CSS3中的transition和transform属性来为图片添加一个缩放效果。您可以将图片的初始尺寸设置为100%,然后将其缩小到0%。 3. 然后,使用JavaScript来为图片添加一个点击事件。当用户点击图片时,您可以使用JavaScript来获取图片的位置和大小,然后使用CSS3中的transform属性将其放大到原始大小。同时,您可以添加一些CSS3过渡效果,使图片看起来像是在爆炸。 4. 最后,您可以在图片周围添加一些文本,并为其添加一个类似于步骤2的缩放效果。当图片被点击时,您可以使用JavaScript来隐藏文本,从而营造出文字炸开的效果。 下面是一个简单的示例代码: HTML: ``` <div class="container"> <img src="your-image.jpg" id="explode-img"> <div class="text-container"> <p>Some text here</p> </div> </div> ``` CSS: ``` .container { position: relative; display: inline-block; } #explode-img { transition: transform 0.5s ease-in-out; transform: scale(0); } .text-container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); transition: transform 0.5s ease-in-out; transform: scale(1); } .text-container p { margin: 0; } .hide { display: none; } ``` JavaScript: ``` var explodeImg = document.getElementById('explode-img'); var textContainer = document.querySelector('.text-container'); explodeImg.addEventListener('click', function() { var imgRect = explodeImg.getBoundingClientRect(); var textRect = textContainer.getBoundingClientRect(); explodeImg.style.transform = 'scale(1)'; explodeImg.style.transition = 'transform 0.5s ease-in-out'; textContainer.style.transform = 'scale(0)'; textContainer.style.transition = 'transform 0.5s ease-in-out'; setTimeout(function() { textContainer.classList.add('hide'); }, 500); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值