Processingエフェクト
この間のProcessingのエフェクトを作ったやつの続きで、ついでに波紋のエフェクトとフェードのエフェクトを作りました。
EffectManagerに登録すればOK。mousePressedでWaveEffectにmouseX,mouseYを渡せば、クリックしたところからふわぁっと波が広がります。
ソースコード
WaveEffectクラス
public class WaveEffect extends Effect{
private int time=0;
private float r1=0;
private float r2=0;
private color c;
private int weight=1;
private float speed;
private float radius=0;
private final int rate=5;
/**
@param r1 inner radius
@param r2 outer radius,effect area
*/
public WaveEffect(int x,int y,float r1,float r2,int weight,color c,float limit,int fRate){
super(x,y,limit,fRate);
this.r1=r1;
this.r2=r2;
this.c=c;
this.weight=weight;
this.speed=r2/(limit*fRate);
}
/**
draw method.
@return isLiving
*/
public boolean draw(){
if(time>limit*fRate){
return false;
}
//draw
float r;
if(radius>r1){
r=r2/radius*rate;
}else{
r=rate;
}
float rSpeed=this.speed*r;
radius+=rSpeed;
stroke(c);
strokeWeight(this.weight);
noFill();
ellipse(x,y,radius,radius);
time++;
return true;
}
}FadeoutScreenEffectクラス
public class FadeoutScreenEffect extends Effect{
private int w;
private int h;
private int time=0;
private int inTime;
private int outTime;
private float inSpeed;
private float outSpeed;
private color c;
private float alpha=0;
public FadeoutScreenEffect(int x,int y,color c,int w,int h,float inTime,float outTime,int fRate){
super(x,y,inTime+outTime,fRate);
this.inTime=(int)inTime*fRate;
this.outTime=(int)outTime*fRate;
this.c=c;
this.w=w;
this.h=h;
this.inSpeed=255.0/this.inTime;
this.outSpeed=-255.0/this.outTime;
//println("inSpeed:"+this.inSpeed+",outSpeed:"+this.outSpeed+"inTime:"+this.inTime+",outTime:"+this.outTime);
}
/**
draw method.
@return isLiving
*/
public boolean draw(){
if(time>limit*fRate){
return false;
}
//draw
if(time alpha+=inSpeed;
if(alpha>=255){
alpha=255;
}
}else{
alpha+=outSpeed;
if(alpha<=0){
alpha=0;
}
}
int r=(int)red(c);
int g=(int)green(c);
int b=(int)blue(c);
stroke(r,g,b,(int)alpha);
fill(r,g,b,(int)alpha);
rect(x,y,w,h);
//println("alpha:"+alpha+",inSpeed:"+inSpeed+",outSpeed:"+outSpeed+"inTime:"+inTime+",outTime:"+outTime);
time++;
return true;
}
} 





