forked from: CurveLaser(くるんくるんレーザー)
くるんくるんレーザー試作品
なんだか適当な処理だなと後になって思う。
簡単にはよけられない程度のへにょり
// forked from Susisu's CurveLaser(くるんくるんレーザー)
//くるんくるんレーザー試作品
//なんだか適当な処理だなと後になって思う。
// 簡単にはよけられない程度のへにょり
package{
import flash.display.*;
import flash.geom.Point;
import flash.events.Event;
import flash.filters.BlurFilter;
import net.hires.debug.Stats;
import flash.geom.*;
[SWF(width="512", height="512", backgroundColor="0x000000", frameRate="60")]
public class Laser extends Sprite{
private var _canvas:BitmapData=new BitmapData(512,512,false,0x000000);
private var bmp:Bitmap=new Bitmap(_canvas,PixelSnapping.AUTO,true);
private var bullet:Array;
private var lArr:Array=new Array(),setObject:Object=new Object();
private var f:uint,l:uint,i:uint,j:uint,k:uint;
private var img:Sprite=new Sprite();
private var filterObj:BlurFilter;
public function Laser(){
f=0;
bullet=new Array();
bullet[0]=new BitmapData(8,8,true,0x0);
var g:Graphics=img.graphics;
g.beginFill(0xffff80,0.5);
g.drawCircle(4,4,4);
g.endFill();
g.beginFill(0xffff00);
g.drawCircle(4,4,2);
g.endFill();
bullet[0].draw(img);
bullet[1]=new BitmapData(8,8,true,0x0);
g.clear();
g.beginFill(0xff80ff,0.5);
g.drawCircle(4,4,4);
g.endFill();
g.beginFill(0xff60ff);
g.drawCircle(4,4,2);
g.endFill();
bullet[1].draw(img);
filterObj=new BlurFilter();
with(filterObj){
blurX=2;
blurY=2;
quality=2;
}
addChild(bmp);
addChild(new Stats());
addEventListener("enterFrame", loop);
}
private function loop(e:Event):void{
if(f%5==0)createLaser(256,256,0.25,0.05,Math.floor(Math.random()*360),(Math.random() > 0.5 ? 1 : -1)*1.5,25,0);
if(f%5==2)createLaser(256,256,0.25,0.1,Math.floor(Math.random()*360),0,25,1);
draw()
f++;
}
private function draw():void{
_canvas.lock();
l=lArr.length;
_canvas.applyFilter(_canvas,_canvas.rect,new Point(0,0),filterObj);
// _canvas.colorTransform(_canvas.rect, new ColorTransform(0.99, 0.99, 0.99));
for(i=0;i<l;i++){
lArr[i].x+=Math.cos(lArr[i].r/180*Math.PI)*lArr[i].v;
lArr[i].y+=Math.sin(lArr[i].r/180*Math.PI)*lArr[i].v;
if(Math.abs(lArr[i].x-256)>256||Math.abs(lArr[i].y-256)>256){
lArr.splice(i,1);
}
else{
lArr[i].v+=lArr[i].a;
lArr[i].r+=lArr[i].ra;
lArr[i].arr.unshift(new Point(lArr[i].x-4,lArr[i].y-4));
lArr[i].arr.pop();
for(k=0;k<lArr[i].len;k++){
_canvas.copyPixels(bullet[lArr[i].type],bullet[lArr[i].type].rect,lArr[i].arr[k]);
}
}
}
_canvas.unlock();
}
private function createLaser(ox:Number,oy:Number,ov:Number,oa:Number,or:Number,ora:Number,olen:uint,otype:uint):void{
setObject=new Object();
setObject.x=ox;
setObject.y=oy;
setObject.v=ov;
setObject.a=oa;
setObject.r=or;
setObject.ra=ora;
setObject.len=olen;
setObject.type=otype;
setObject.arr=new Array(setObject.len);
for(j=0;j<setObject.len;j++){
setObject.arr[j]=new Point(setObject.x-4,setObject.y-4);
}
lArr.push(setObject);
}
}
}