forked from: flash on 2009-8-4
forked from flash on 2009-8-4 (diff: 109)
クリックで増える(5つまで)。負荷は減らし方勉強しないといけません...
ActionScript3 source code
/**
* Copyright iong ( http://wonderfl.net/user/iong )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/tmEq
*/
// forked from iong's flash on 2009-8-4
// クリックで増える(5つまで)。負荷は減らし方勉強しないといけません...
package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.filters.BlurFilter;
import flash.geom.Point;
import flash.display.DisplayObject;
import flash.utils.setInterval;
import flash.utils.clearInterval;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Stage;
import flash.display.StageQuality;
import flash.display.StageScaleMode;
[SWF(backgroundColor="#FFFFFF")]
public class As002 extends Sprite
{
private var gS:Sprite;
private var cv:BitmapData;
private var cP:Sprite;
private var mRBlur:BlurFilter;
private var aryGS:Array = new Array();
private var arySI:Array = new Array();
private var aryTP:Array = new Array();
private var aryPX:Array = new Array();
// 動作の間隔(ms)
private var iSI:uint = 1000;
// 増やす最大数
private var iMax:uint = 5;
public function As002():void
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.quality = StageQuality.LOW;
stage.frameRate = 30;
init();
act();
}
private function init():void
{
cv = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xffffff);
cP = new Sprite();
makeGroup();
mRBlur = new BlurFilter(4, 4);
this.addChild(new Bitmap(cv));
}
private function act():void
{
stage.addEventListener(MouseEvent.CLICK, makeGroup);
cP.addEventListener(Event.ENTER_FRAME, onEFPiece);
this.addEventListener(Event.ENTER_FRAME, onEFRoot);
}
// 移動するグループ・設定を作成、動作開始
private function makeGroup(e:Event=null):void
{
var gSP:Sprite = makePiece(Math.round(Math.random()*100));
var i:uint = aryGS.length;
gSP.name= "g"+i;
cP.addChild(gSP);
if(i==iMax){
var target:DisplayObject = cP.getChildAt(0);
cP.removeChildAt(0);
target = null;
clearInterval(arySI[0]);
aryGS.splice(0,1);
arySI.splice(0,1);
aryTP.splice(0,1);
aryPX.splice(0,1);
i = aryGS.length;
}
aryGS.push(gSP);
aryTP.push(new Array(0,0));
aryPX.push(0);
arySI.push(setInterval(onSI, iSI, i));
}
// 動作MC
private function makePiece(n:uint):Sprite
{
var retVal:Sprite = new Sprite();
var gSP:Sprite;
for(var i:uint=1; i<=5; i++){
gSP= new Sprite();
gSP.name = "gSP"+i;
gSP.graphics.beginFill(retC(), 0.6);
gSP.graphics.drawCircle(-n/2, -n/2, n);
retVal.addChild(gSP);
gSP.y = n*(i-1);
}
retVal.x = Math.round(Math.random()*stage.stageWidth);
retVal.y = Math.round(Math.random()*stage.stageHeight);
return retVal;
}
// MC移動
private function movePiece(i:uint):void
{
aryGS[i].x += (aryTP[i][0]-aryGS[i].x)*.2;
aryGS[i].y += (aryTP[i][1]-aryGS[i].y)*.2;
aryGS[i].rotation += aryGS[i].x-aryPX[i];
aryPX[i] = aryGS[i].x;
}
private function retC():Number
{
var coR:String= (70+Math.round(Math.random()*185)).toString(16);
var coG:String= (70+Math.round(Math.random()*185)).toString(16);
var coB:String= (70+Math.round(Math.random()*185)).toString(16);
return parseInt("0x"+coR+coG+coB, 16)
}
private function onSI():void
{
aryTP[arguments[0]][0] = Math.round(Math.random()*stage.stageWidth);
aryTP[arguments[0]][1] = Math.round(Math.random()*stage.stageHeight);
}
private function onEFRoot(e:Event):void
{
cv.draw(cP, null, null, BlendMode.OVERLAY);
cv.applyFilter(cv, cv.rect, new Point(), mRBlur);
}
private function onEFPiece(e:Event):void
{
for(var i:uint=0; i<aryGS.length; i++){
movePiece(i)
}
}
}
}
