查看: 5117|回复: 3
打印 上一主题 下一主题

粒子螺旋发射效果

[复制链接]

9210

主题

1

听众

5万

积分

内部人员

Rank: 7Rank: 7Rank: 7

纳金币
12582
精华
186

活跃会员

跳转到指定楼层
楼主
发表于 2013-5-2 16:08:43 |只看该作者 |倒序浏览
pstatus"> 本帖最后由 lut_456 于 2013-5-2 16:08 编辑

是一个粒子由中间向四周螺旋发射的效果。
利用三角函数和不断递增的半径实现螺旋运动。
原理相同,代码重新实现(源代码看得我阵阵蛋痛,可能是编程习惯不同吧)。
  1. package {
  2.         import flash.display.*;
  3.         import flash.events.*;
  4.         import flash.geom.*;

  5.         /**
  6.          * 参考 http://wonderfl.net/c/wk4T
  7.          * @author http://www.ssnangua.com
  8.          */
  9.         [SWF(width=465, height=465)]
  10.         public class ParticleBulletMain extends Sprite
  11.         {
  12.                 private var canvas_bd:BitmapData;
  13.                 private var ctf:ColorTransform = new ColorTransform( 1, 1, 1, 0.9 );//颜色转换:alpha通道*0.9
  14.                 private var bulletArr:Array = new Array();
  15.                 private var mtx:Matrix = new Matrix();//绘制时使用到的矩阵,用于偏移绘制坐标
  16.                
  17.                 public function ParticleBulletMain () {
  18.                         canvas_bd = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0x000000 );
  19.                         addChild( new Bitmap( canvas_bd ) );
  20.                        
  21.                         addEventListener( Event.ENTER_FRAME, enterFrameEvt );
  22.                 }
  23.                
  24.                 private function enterFrameEvt( e:Event ):void {
  25.                         //不断添加Bullet
  26.                         for ( var i:int = 0; i < 3; i++ ) {
  27.                                 var bullet:Bullet = new Bullet(stage.stageWidth/2, stage.stageHeight/2);//舞台中间
  28.                                 bulletArr.push(bullet);//添加到数组
  29.                         }
  30.                        
  31.                         //绘制前锁定BitmapData
  32.                         canvas_bd.unlock();
  33.                         //绘制
  34.                         for (var j:int = 0; j < bulletArr.length; j++) {
  35.                                 var bullet:Bullet = bulletArr[j] as Bullet;
  36.                                 bullet.update();//更新bullet
  37.                                
  38.                                 //如果bullet超出画布范围,移除bullet,不进行绘制
  39.                                 if (canvas_bd.rect.contains(bullet.x, bullet.y) == false) {
  40.                                         var index:int = bulletArr.indexOf(bullet);
  41.                                         if (index != -1) {
  42.                                                 bulletArr.splice(index, 1);
  43.                                         }
  44.                                         continue;
  45.                                 }
  46.                                
  47.                                 mtx.identity();
  48.                                 mtx.tx = bullet.x;
  49.                                 mtx.ty = bullet.y;
  50.                                 canvas_bd.draw( bullet, mtx );//绘制bullet
  51.                         }
  52.                         //应用颜色转换,降低BitmapData透明度
  53.                         canvas_bd.colorTransform( canvas_bd.rect, ctf );
  54.                         //绘制完成解锁BitmapData
  55.                         canvas_bd.lock();
  56.                 }
  57.                
  58.         }
  59.        
  60. }

  61. import flash.display.Shape;

  62. class Bullet extends Shape
  63. {
  64.         private var v:Number;//速度
  65.         private var a:Number;//加速度
  66.         private var r:Number;//运动半径
  67.         private var vx:Number;//x速度
  68.         private var vy:Number;//y速度
  69.         private var vr:Number;//半径速度
  70.        
  71.         public function Bullet(x:Number, y:Number):void {
  72.                 this.x = x;
  73.                 this.y = y;
  74.                
  75.                 v = 3 * Math.random();//随机速度
  76.                 r = 2 * Math.PI * Math.random();//随机初始半径
  77.                 a = 0.1;
  78.                 vr = 0.03;
  79.                
  80.                 draw();//绘制
  81.         }
  82.         private function draw():void {
  83.                 var size:Number = 1 + 4*Math.random();//随机大小
  84.                 var color:uint = 0xffffff * Math.random();//随机颜色
  85.                 this.graphics.beginFill(color);
  86.                 this.graphics.drawCircle(0, 0, size);
  87.                 this.graphics.endFill();
  88.         }
  89.        
  90.         //更新
  91.         public function update():void {
  92.                 v += a;
  93.                 r += vr;
  94.                 vx = v * Math.cos( r );
  95.                 vy = v * Math.sin( r );
  96.                 x += vx;
  97.                 y += vy;
  98.         }
  99. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

0

主题

2

听众

3482

积分

中级设计师

Rank: 5Rank: 5

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-1-17 08:59:17 |只看该作者
不错的资源,感谢楼主分享,支持下
回复

使用道具 举报

0

主题

2

听众

1346

积分

助理设计师

Rank: 4

纳金币
505
精华
0
板凳
发表于 2014-9-29 17:51:21 |只看该作者
很棒的资源,谢谢楼主分享...顶一下
回复

使用道具 举报

icon    

0

主题

1

听众

110

积分

设计实习生

Rank: 2

纳金币
2
精华
0

最佳新人

地板
发表于 2015-1-23 10:40:46 |只看该作者

pstatus"> 本帖最后由 比巴卜 于 2013-10-28 08:57 编辑

lash AS3制作个性的旋转圆形网页导航,最终效果如下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-10 15:18 , Processed in 0.096428 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部