Archive for 12月, 2008

particle system

星期四, 12月 25th, 2008

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)
Particle.as

package
{
 import flash.display.*;
 
 public class Particle
 { 
  public var clip : DisplayObject;
  
  public var xVel : Number = 0;
  public var yVel : Number = 0;
  
  public var drag : Number = 1;
  
  public var gravity : Number = 0;
  
  public var shrink : Number = 1;
  public var fade : Number = 0;
  
  // This is the constructor, a special function used
  // to create this particle object.
  
  public function Particle(symbolclass : Class, target : DisplayObjectContainer,
           xpos : Number, ypos : Number)
  {
   // make the particle clip
   clip = new symbolclass();
   
   // add it to the target (usually the stage)
   target.addChild(clip);
   
   // and move it to its starting position
   clip.x = xpos;
   clip.y = ypos;
   
   
  }
  
  public function update() : void
  {
   // add the velocity to the clip's position
   clip.x += xVel;
   clip.y += yVel;
   
   // apply drag
   xVel *= drag;
   yVel *= drag;
   
   yVel += gravity;
   
   clip.scaleX *= shrink;
   clip.scaleY *= shrink;
   
   clip.alpha -=fade;
   
  }
  
  // take the clip off the stage
  public function destroy():void
  {
   clip.parent.removeChild(clip);
   
  }
  
 }
 
 
}

Particle.fla

// an array in which to store our particles
var particles:Array = new Array();



// call frameLoop every frame
addEventListener(Event.ENTER_FRAME, frameLoop);
var _isgravity:Number=-1;
function frameLoop(e:Event) {
 var particle:Particle;
 // loop through the array of particles and update each one
 for (var i : int = 0; i < particles.length; i++) {
  // update the particle at index i
  particles[i].update();
 }
 // make a new particle
 particle = new Particle(Spark, this, 200, 100);

 // set our particle's velocity
 particle.xVel = randRange(-1,1);
 particle.yVel = 0;
  // add drag
 particle.drag = 0.97;
 // add gravity
 particle.gravity = _isgravity;

 // randomise initial particle size
 particle.clip.scaleX = particle.clip.scaleY = randRange(0.5, 0.8);
 // add shrink
 particle.shrink = 1.02;
 // add fade
 particle.fade = 0.01;
 // set the particle's starting alpha
 particle.clip.alpha = 0.6;

 // and add it to the array of particles
 particles.push(particle);


 // if there are more than 80 particles delete the first
 // one in the array...
 while (particles.length>60) {
  particle = particles.shift();
  particle.destroy();

 }
}

// returns a random value between min and max
function randRange(min:Number, max:Number) {
 return Math.random() * max - min + min;
}
gplus.addEventListener(MouseEvent.CLICK, f_gplus);
gminus.addEventListener(MouseEvent.CLICK, f_gminus);
function f_gplus(e:MouseEvent):void {
 _isgravity+=.1;
}
function f_gminus(e:MouseEvent):void {
 _isgravity-=.1;
}

2008 xmas & new year

星期二, 12月 23rd, 2008

2008年发生了太多的事情(雪灾,地震,经济危机),希望09年早点结束。
圣诞节和元旦。
08年把网站重新设计了一遍。
08年里把两个应该完成的项目带入了09年。
。。。

rotation test 和残象

星期一, 12月 22nd, 2008

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

//最大mc数量
var maxMc:Number = 10;
//当前mc数量
var currentMc:Number = 0;
//残像衰减值
var aLimit:Number = 10;


genMc();
//生成mc
function genMc():Void {
 for(i:Number = 0; i<maxMc; i++) {;
 var flymc:MovieClip = attachMovie("mccat", "mccat"+i, 900+i);
 //随机颜色
 myColor = Math.round(Math.random()*0xFFFFFF);
 myColoredObject = new Color(flymc);
 myColoredObject.setRGB(myColor);
 //初始坐标
 flymc._x = randRange(380, 400);
 flymc._y = randRange(280, 330);
 flymc.t = 0;
 //不断循环
 flymc.onEnterFrame = function() {
  moveflymc(this);
 };
 //当前mc数量加一
 currentMc += 1;
}
}


function moveflymc(mc):Void {
mc._rotation += mc.t*2;
mc._x -= 10+Math.cos(mc.t)*10;
mc._y -= Math.sin(mc.t)*8;
var depth:Number = _root.getNextHighestDepth();
//复制新的mc
var afterImage_mc:MovieClip = mc.duplicateMovieClip("afterImage_"+depth, depth);
afterImage_mc.onEnterFrame = function() {
 this._alpha *= t; 
 if (this._alpha<=aLimit) {
  this.removeMovieClip();
 }
};
//随即旋转角度
if (mc.t<6.5) {
 mc.t += randRange(.1, .15);
}
//出边界后删除
if (mc._x<0) {
 removeflymc(mc);
}
}


function removeflymc(mc):Void {
currentMc -= 1;
mc.removeMovieClip();

if (currentMc == 0) {
 genMc();
}
}

//生成介于min和max之间的随机函数
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
return randomNum;
}

stop();

APE step1 介绍以及example1

星期三, 12月 10th, 2008

AbstractCollection 所有群组的抽象类

AbstractConstraint 所有物理相互作用的的抽象类

AbstractItem 所有相互作用(碰撞)、粒子的基类

AbstractParticle 关于粒子的基类

APEngine 主引擎、力的类

CircleParticle 圆形粒子

RectangleParticle 矩形粒子

Composite 可以包含粒子和碰撞的复合物类

Group 一个组的类,可以包含粒子、碰撞、复合物

SpringConstraint 两个粒子之间类似弹性碰撞的类(弹簧)

Vector 力

WheelParticle 一个粒子,模拟轮子行为

********************************************************************************************

这些类的继承关系:

AbstractCollection 所有群组的抽象类

Composite 可以包含粒子和碰撞的复合物类

Group 一个组的类,可以包含粒子、碰撞、复合物

AbstractItem 所有相互作用(碰撞)、粒子的基类

AbstractConstraint 所有物理相互作用的的抽象类

SpringConstraint 两个粒子之间类似弹性碰撞的类(弹簧)

AbstractParticle 关于粒子的基类

RectangleParticle 矩形粒子

CircleParticle 圆形粒子

WheelParticle 一个粒子,模拟轮子行为

APEngine 主引擎、力的类

Vector 力