| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
我做Zanox这三年:
T2click:我爱卡(
T2click:商机热线
龙太极/100m/asp/
Sharea免费3G媒体
浅谈CPM、CPC、CP
谈Google广告的单
使用report build
FlashMX2004的事件
V2组件事件模型pa

Particle粒子发射效果教程           

Particle粒子发射效果教程

作者:佚名 来源:闪吧 更新:2007-1-13 20:48:58 错误报告 我要投稿

先给出类文件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 -->
点击浏览该文件
文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。