離した位置に集まる
♥0 |
Line 105 |
Modified 2011-01-25 19:49:36 |
MIT License
archived:2017-03-20 17:26:03
ActionScript3 source code
/**
* Copyright hig_an ( http://wonderfl.net/user/hig_an )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/u3km
*/
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.ColorTransform;
public class Main extends Sprite {
private var circleList:Array;
private var numOfCircle:Number = 20;
private var circleSize:Number = 10;
private var bmpd:BitmapData;
private var mt:Matrix;
private var curMousePoint:Point;
private var sp:Sprite;
private var colorTf:ColorTransform;
private var clicked:Boolean;
private var num:int;
private var preMousePoint:Point;
private var scaleRate:Number;
public function Main():void {
circleList = new Array();
bmpd = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x0);
mt = new Matrix();
curMousePoint = new Point();
colorTf = new ColorTransform();
clicked = false;
num = 0;
sp = newFig(0, 0, circleSize);
preMousePoint = new Point();
reset();
addChild(new Bitmap(bmpd));
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private function onMouseDown(e:MouseEvent):void {
addEventListener(Event.ENTER_FRAME, loop);
clicked = true;
}
private function onMouseUp(e:MouseEvent):void {
preMousePoint.x = mouseX;
preMousePoint.y = mouseY;
if(clicked)stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
clicked = false;
}
private function loop(e:Event):void {
bmpd.lock()
if(clicked){
bmpd.fillRect(bmpd.rect, 0x0);
num = ++num % circleList.length;
circleList[num].x = mouseX;
circleList[num].y = mouseY;
for (var i:int = 0; i < circleList.length; i++) {
mt.identity();
mt.translate(circleList[i].x, circleList[i].y);
bmpd.draw(sp, mt);
}
}else {
bmpd.fillRect(bmpd.rect, 0x0);
for (i = 0; i < circleList.length; i++) {
circleList[i].x -= (circleList[i].x - preMousePoint.x) * 0.1;
circleList[i].y -= (circleList[i].y - preMousePoint.y) * 0.1;
mt.identity();
scaleRate *= 0.995;
mt.scale(scaleRate,scaleRate)
mt.translate(circleList[i].x, circleList[i].y);
bmpd.draw(sp, mt);
}
if (scaleRate<0.01) {
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
reset();
bmpd.fillRect(bmpd.rect, 0x0);
removeEventListener(Event.ENTER_FRAME, loop);
}
}
bmpd.unlock()
}
private function newFig(xx:Number,yy:Number,size:Number):Sprite {
var s:Sprite = new Sprite();
s.graphics.beginFill(0xFF0000);
s.graphics.drawCircle(xx, yy, size);
s.graphics.endFill();
return s;
}
private function reset():void {
for (var i:int = 0; i < numOfCircle; i++) {
circleList[i] = new Circle(100, -100, circleSize);
}
scaleRate = 1;
num = 0;
}
}
}
class Circle {
public var x:Number;
public var y:Number;
public var size:Number;
public function Circle(xx:Number,yy:Number,s:Number):void {
x = yy;
y = yy;
size = s;
}
}