本页内容是《Particle粒子发射效果教程》同时我们还提供济宁地区的网站建设,百度,雅虎,google的推广,点金,商友,等营销软件
请输入关键字:

标题搜索 内容搜索  

你现在所在的位置->首页->flash->Particle粒子发射效果教程

Particle粒子发射效果教程

时间:[2006-4-29 14:32:35]     作者:作者不详

先给出类文件Particle.as
class Particle {
private var _body:MovieClip;
private var _gravity:Number = 5;
private var _angle:Number = 90;
private var _velocity:Number = 20;//: 单位是px每s
private var _lifeTime:Number = 5000;
private var startAlpha:Number;//:得到初始粒子透明度,以便计算透明度STEP
private var JinDu:Number = 30;
private var Times:Number = 0;
private var timeID;
//:下面是一些重要属性的接口函数
function Particle(b:MovieClip) {
_body = b;
startAlpha = _body._alpha;
}
public function get body():MovieClip {
return _body;
}
public function set body(b:MovieClip):Void {
_body = b;
}
public function get gravity():Number {
return _gravity;
}
public function set gravity(g:Number):Void {
_gravity = g;
}
public function get angle():Number {
return _angle;
}
public function set angle(a:Number):Void {
_angle = a;
}
public function get velocity():Number {
return _velocity;
}
public function set velocity(v:Number):Void {
_velocity = v;
}
public function get jindu():Number {
return JinDu;
}
public function set jindu(j:Number):Void {
if (j>0) {
JinDu = j;
} else {
JinDu = 1;
}
}
public function get lifeTime():Number {
return _lifeTime;
}
public function set lifeTime(t:Number):Void {
if (t>0) {
_lifeTime = t;
} else {
_lifeTime = Infinity;
//: 小于等于零的生命时间表示无穷大 ://
}
}
public function shoot():Void {
timeID = setInterval(this, "dirve", JinDu);
}
//:驱动粒子的运动
private function dirve() {
var t:Number = JinDu/1000;
//:单位是秒
var alphaStep:Number = startAlpha/int(_lifeTime/JinDu);
_body._x += _velocity*Math.cos(_angle*Math.PI/180)*t;
_body._y += -(_velocity*Math.sin(_angle*Math.PI/180)*t)+(_gravity*Times*Times/2);
_body._alpha -= alphaStep;
Times += t;
if (_x<0 or _y<0 or _x>Stage.width or _y>Stage.height or _alpha<=10) {
_body.removeMovieClip();
delete this;
PStop();
}
//: 粒子已飞出舞台 ://
updateAfterEvent();
}
private function PStop() {
Times = 0;
clearInterval(timeID);
}
public function getClone() {
return (new Particle(new MovieClip()));
}
}

//:此类的特点是,可以控制粒子刷新率,而不受帧速率影响:)
   
在第一帧的代码:
var id:Number = 0;
var gs:Number = 0; //重力初值
var vs:Number = 100;//基速初值
var ls:Number = 1000;//生命初值
var as:Number = 45;//射角初值
var a:Array = new Array();
//绘出粒子BODY并返回
function createP():MovieClip {
var body = _root.createEmptyMovieClip("P" add id, id+1);
body._x = Stage.width/2;
body._y = Stage.height/2;
body.lineStyle(0, 0xffffff, 100);
body.moveTo(0, 0);//画图形
body.lineTo(5, 0);
body.lineTo(5, 5);
body.lineTo(0, 5);
body.lineTo(0, 0);
var ss = 100+random(50);
body._xscale = ss;
body._yscale = ss;
id++;
if (id == 50) {
id = 0;
}
return (body);
}
function sss() {
a[id] = new Particle(createP());
a[id-1].jindu = 20;// 刷新率20表示一秒钟刷1000/20 = 50次,相当于50帧/秒
a[id-1].gravity = gs;
a[id-1].velocity = vs+random(50);
a[id-1].angle = as + random(180-2*as);
a[id-1].lifeTime = ls+random(2000);
a[id-1].shoot();
}
var tid = setInterval(sss, 50);
最后加上按钮:
重力加:
on(press){
_root.as += 5;
}
重力减:
on(press){
_root.as -= 5;
}
基速加:
on(press){
_root.as += 5;
}
基速减:
on(press){
_root.as -= 5;
}
生命加:
on(press){
_root.ls += 100;
}
生命减:
on(press){
_root.ls -= 100;
}
射角加:
on(press){
_root.as -= 5;
}
射角减:

on(press){
_root.as += 5;
}
//:AS文件和FLA须在同一目录下方可编译成功
//:粒子的形状可任意绘制

效果如下:
<!-- / message --><!-- sig -->
<!-- / message --><!-- sig -->

点这里下载演示效果文件

【声明】本站刊载的《Particle粒子发射效果教程》一文如果有侵害你权益的情况,请联系我们。我们将及时采取措施。
QQ:44637339 Email:just6@163.com Tel:13355163107 Lining studios

友情链接

本页内容是《Particle粒子发射效果教程》 返回顶部
© 2001-2024 Lining studios 济宁速创科技有限公司, All Rights Reserved
 Processed Time:62.500ms
中华人民共和国信息产业部网站备案号: 鲁ICP备09103015号-1