flash on 2015-8-6
♥0 |
Line 84 |
Modified 2015-08-06 22:15:02 |
MIT License
archived:2017-03-30 11:44:13
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/2bn4
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecRect = new Vector.<xRect>(0, false);
var a:xRect; var i:int;
for (i = 0; i < 16; i += 1)
{
a = new xRect();
var t:Number;
t = i * 0.4;
a.cx = 320+Math.cos(t)*160;
a.cy = 240 + Math.sin(t) * 160;
//a.cx = i*24; a.cy = 100;
a.xrad = 8 + i ;
a.xrad = 16;
vecRect.push(a);
}//nexti
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecRect:Vector.<xRect>;
public function isInside(ax:Number, ay:Number, a:xRect):Boolean
{
if (ax < a.cx - (a.xrad)) { return false; } if (ax > a.cx + (a.xrad)) { return false; }
if (ay < a.cy - (a.xrad)) { return false; } if (ay > a.cy + (a.xrad)) { return false; }
return true;
}//isinside
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public var gt:int = 0;
public function onEnter(e:Event):void
{
var mx:Number; var my:Number;
mx = stage.mouseX;
my = stage.mouseY;
graphics.clear();
graphics.lineStyle(2, 0);
var ang:Number;
var vx:Number; var vy:Number;
var a:xRect; var b:xRect;
var num:int; var i:int; var k:int;
var kx:Number; var ky:Number;
num = vecRect.length;
for (i = 0; i < num; i += 1)
{
a = vecRect[i];
if ((gt+i)% 40 ==0)
{
if (getMag(my-a.cy, mx-a.cx) > 140)
{ a.ang = Math.atan2(my-a.cy, mx-a.cx); }
else { a.ang = Math.atan2(my-a.cy, mx-a.cx) + 3.1415 + Math.random(); }
}
ang = a.ang;
vx = Math.cos(ang) * 4;
vy = Math.sin(ang) * 4;
if (vx > 0 && a.cx > 465) { vx *= -1; a.ang+=3.1415; }
else if (vx < 0 && a.cx < 0) { vx *= -1; a.ang+=3.1415; }
if (vy > 0 && a.cy > 465) { vy *= -1; a.ang+=3.1415; }
else if (vy < 0 && a.cy < 0) { vy *= -1; a.ang+=3.1415; }
for (k = 0; k < num; k += 1)
{
if (i == k) { continue; }
b = vecRect[k];
if (vx > 0 && isInside(a.cx+a.xrad, a.cy, b)) { vx = 0; }
else if (vx < 0 && isInside(a.cx-a.xrad, a.cy, b)) { vx = 0; }
if (vy > 0 && isInside(a.cx, a.cy+a.xrad, b)) { vy = 0; }
else if (vy < 0 && isInside(a.cx, a.cy-a.xrad, b)) { vy = 0; }
}//nextk
a.cx += vx; a.cy += vy;
graphics.drawRect(a.cx - a.xrad, a.cy - a.xrad, a.xrad * 2, a.xrad * 2);
graphics.drawCircle(a.cx, a.cy, a.xrad);
}//nexti
graphics.drawCircle(mx,my, 8);
gt += 1;
}//onenter
}//classend
}
internal class xRect
{
public var cx:Number = 0;
public var cy:Number = 0;
public var xrad:Number = 16;
public var ang:Number = 0;
}//xrect