flash on 2010-7-23
♥0 |
Line 163 |
Modified 2010-07-24 14:10:58 |
MIT License
archived:2017-03-20 03:12:09
ActionScript3 source code
/**
* Copyright dizgid ( http://wonderfl.net/user/dizgid )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/wip3
*/
package {
import flash.events.KeyboardEvent;
import flash.display.Graphics;
import flash.geom.Point;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
private var _dots:Array;
private var _prots:Array;
private var _base:Sprite;
private var _limit:Number = 200;
private var _w_num:int = 12;
private var _h_num:int = 12;
private var _offset:Number = 40.0;
public function FlashTest() {
// write as3 code here..
_base = new Sprite();
_base.graphics.beginFill(0x666666,0.5);
_base.graphics.drawRect(0,0,stage.stageWidth, stage.stageWidth);
_base.graphics.endFill();
_base.graphics.lineStyle(0, 0xff0000);
_base.graphics.drawRect(0,0,(_w_num-1)*_offset, (_h_num-1)*_offset);
this.addChild(_base);
_dots = [];
_prots = [];
for(var i:int =0; i < _w_num*_h_num; i++){
var d:Dot = new Dot();
this.addChild(d);
_dots.push(d);
d.x = Math.floor(i % _w_num) * _offset;
d.y = Math.floor(i / _w_num) * _offset;
d.initX = d.x;
d.initY = d.y;
}
this.addEventListener(Event.EXIT_FRAME, enterFrameHandler);
_base.addEventListener(MouseEvent.CLICK, mouseHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
}
public function mouseHandler(e:MouseEvent):void
{
var p:Prot = new Prot();
this.addChild(p);
p.x = stage.mouseX;
p.y = stage.mouseY;
_prots.push(p);
}
private function keyDownHandler(e:KeyboardEvent):void
{
var p:Prot = _prots[0];
this.removeChild(p);
_prots.shift();
}
public function enterFrameHandler(e:Event):void
{
for(var i:int = 0; i < _dots.length; i++){
var d:Dot= _dots[i];
var distance:Number=0;
var mPer:Number = 0;
d.vecX = 0;
d.vecY = 0;
//for(var n:int = 0; n < 1; n++){
for(var n:int = 0; n < _prots.length; n++){
var p:Prot = _prots[n];
var mx:Number = p.x;
var my:Number = p.y;
var dx:Number = mx - d.initX;
var dy:Number = my - d.initY;
var t_distance:Number = Math.sqrt(dx * dx + dy*dy);
var vec:Point = new Point(dx, dy);
vec.normalize(1);
d.vecX += vec.x;
d.vecY += vec.y;
if(t_distance > _limit){
t_distance = _limit;
}
//distance += t_distance;
var t_per:Number = (1-(t_distance/_limit));
mPer += t_per;
}
/*
if(distance > 400){
distance = 400;
}
*/
// var per:Number = (1-(distance/400));
if(mPer > 1){
mPer = 1;
}
var per:Number = mPer;
var mVec:Point = new Point(d.vecX, d.vecY);
mVec.normalize(1);
if(Math.floor(i%_w_num) != 0 && Math.floor(i%_w_num) != _w_num-1){
//d.x = d.initX - per*20 * d.vecX;
d.x = d.initX - per*20 * mVec.x;
}
if(Math.floor(i/_w_num) != _h_num-1 && Math.floor(i/_w_num) != 0){
//d.y = d.initY - per*20 * d.vecY;
d.y = d.initY - per*20 * mVec.y;
}
d.scaleX = d.scaleY = per;
}
render();
}
private function render():void
{
var g:Graphics = this.graphics;
g.clear();
g.lineStyle(0, 0x333333);
for(var n:int = 0; n < _h_num; n++)
{
for(var i:int = 0; i < _w_num; i++)
{
var d:Dot = _dots[(n*_w_num)+i];
if(i == 0)
{
g.moveTo(d.x, d.y);
}else{
g.lineTo(d.x, d.y);
if(n < _h_num-1){
var nd:Dot = _dots[((n+1)*_w_num)+i];
g.lineTo(nd.x, nd.y);
g.moveTo(d.x, d.y)
}
}
}
}
}
}
}
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Graphics;
import flash.display.Sprite;
internal class Dot extends Sprite{
public var vecX:Number=0;
public var vecY:Number=0;
public var initX:Number;
public var initY:Number;
public function Dot()
{
var g:Graphics = this.graphics;
g.beginFill(0x333333, 0.25);
g.drawCircle(0,0,10);
g.endFill();
}
}
internal class Prot extends Sprite{
public function Prot()
{
var g:Graphics = this.graphics;
g.beginFill(0x000000, 0.5);
g.drawCircle(0,0,10);
g.endFill();
this.addEventListener(Event.ENTER_FRAME, enterframeHandler);
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
private var _isDrag:Boolean;
private function mouseDownHandler(e:MouseEvent):void
{
_isDrag = true;
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
this.startDrag();
}
private function mouseUpHandler(e:MouseEvent):void
{
_isDrag = false;
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
this.stopDrag();
}
private function enterframeHandler(e:Event):void
{
}
}