纳金网
标题:
粒子螺旋发射效果
[打印本页]
作者:
lut_456
时间:
2013-5-2 16:08
标题:
粒子螺旋发射效果
本帖最后由 lut_456 于 2013-5-2 16:08 编辑
是一个粒子由中间向四周螺旋发射的效果。
利用三角函数和不断递增的半径实现螺旋运动。
原理相同,代码重新实现(源代码看得我阵阵蛋痛,可能是编程习惯不同吧)。
http://www.fileden.com/files/2011/9/19/3197822/ParticleBullet.swf
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
/**
* 参考 http://wonderfl.net/c/wk4T
* @author http://www.ssnangua.com
*/
[SWF(width=465, height=465)]
public class ParticleBulletMain extends Sprite
{
private var canvas_bd:BitmapData;
private var ctf:ColorTransform = new ColorTransform( 1, 1, 1, 0.9 );//颜色转换:alpha通道*0.9
private var bulletArr:Array = new Array();
private var mtx:Matrix = new Matrix();//绘制时使用到的矩阵,用于偏移绘制坐标
public function ParticleBulletMain () {
canvas_bd = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0x000000 );
addChild( new Bitmap( canvas_bd ) );
addEventListener( Event.ENTER_FRAME, enterFrameEvt );
}
private function enterFrameEvt( e:Event ):void {
//不断添加Bullet
for ( var i:int = 0; i < 3; i++ ) {
var bullet:Bullet = new Bullet(stage.stageWidth/2, stage.stageHeight/2);//舞台中间
bulletArr.push(bullet);//添加到数组
}
//绘制前锁定BitmapData
canvas_bd.unlock();
//绘制
for (var j:int = 0; j < bulletArr.length; j++) {
var bullet:Bullet = bulletArr[j] as Bullet;
bullet.update();//更新bullet
//如果bullet超出画布范围,移除bullet,不进行绘制
if (canvas_bd.rect.contains(bullet.x, bullet.y) == false) {
var index:int = bulletArr.indexOf(bullet);
if (index != -1) {
bulletArr.splice(index, 1);
}
continue;
}
mtx.identity();
mtx.tx = bullet.x;
mtx.ty = bullet.y;
canvas_bd.draw( bullet, mtx );//绘制bullet
}
//应用颜色转换,降低BitmapData透明度
canvas_bd.colorTransform( canvas_bd.rect, ctf );
//绘制完成解锁BitmapData
canvas_bd.lock();
}
}
}
import flash.display.Shape;
class Bullet extends Shape
{
private var v:Number;//速度
private var a:Number;//加速度
private var r:Number;//运动半径
private var vx:Number;//x速度
private var vy:Number;//y速度
private var vr:Number;//半径速度
public function Bullet(x:Number, y:Number):void {
this.x = x;
this.y = y;
v = 3 * Math.random();//随机速度
r = 2 * Math.PI * Math.random();//随机初始半径
a = 0.1;
vr = 0.03;
draw();//绘制
}
private function draw():void {
var size:Number = 1 + 4*Math.random();//随机大小
var color:uint = 0xffffff * Math.random();//随机颜色
this.graphics.beginFill(color);
this.graphics.drawCircle(0, 0, size);
this.graphics.endFill();
}
//更新
public function update():void {
v += a;
r += vr;
vx = v * Math.cos( r );
vy = v * Math.sin( r );
x += vx;
y += vy;
}
}
复制代码
作者:
shenyg77
时间:
2014-1-17 08:59
不错的资源,感谢楼主分享,支持下
作者:
oelongeo
时间:
2014-9-29 17:51
很棒的资源,谢谢楼主分享...顶一下
作者:
icon
时间:
2015-1-23 10:40
pstatus"> 本帖最后由 比巴卜 于 2013-10-28 08:57 编辑
lash AS3制作个性的旋转圆形网页导航,最终效果如下。
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5