flash on 2015-11-16
♥0 |
Line 78 |
Modified 2015-11-16 05:26:45 |
MIT License
archived:2017-03-30 11:41:50
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/g169
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecAct = new Vector.<xRect>(0, false);
var i:int; var a:xRect;
for (i=0;i<64;i+=1)
{
a = new xRect();
a.cx = Math.random()*430;
a.cy = Math.random()*430;
vecAct.push(a);
a.xrad = 8+Math.random()*16;
a.yrad = 8+Math.random()*16;
}//nexti
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecAct:Vector.<xRect>;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
var i:int; var num:int; var a:xRect;
num = vecAct.length;
for (i=0;i<num;i+=1)
{
a = vecAct[i];
a.vy += 0.3;
a.vx *= 0.99;
a.vy *= 0.99;
if (a.cy > 465-a.yrad && a.vy>0) { a.vy *= -0.5; a.cy=465-a.yrad; }
if (a.cx < a.xrad && a.vx<0) { a.vx *= -0.5; a.cx=a.xrad; }
if (a.cx > 465-a.xrad && a.vx>0) { a.vx *= -0.5; a.cx=465-a.xrad;}
checkCol(a);
a.cx += a.vx; a.cy += a.vy;
graphics.beginFill(0x808080,1);
//graphics.drawCircle(a.cx,a.cy, a.rad);
graphics.drawRect(a.cx-a.xrad,a.cy-a.yrad,a.xrad*2,a.yrad*2);
graphics.endFill();
}//nexti
}//oenenter
public function getMag(ax:Number,ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public function checkCol(m:xRect):void
{
var i:int; var num:int; var a:xRect;
var dot:Number; var nx:Number; var ny:Number;
var ta:Number; var d:Number;
num = vecAct.length;
for (i=0;i<num;i+=1)
{
a = vecAct[i];
if (a == m) { continue; }
// d = getMag(a.cx-m.cx, a.cy-m.cy);
//if (d > a.rad+m.rad) { continue; }
if (a.cx - a.xrad > m.cx + m.xrad) { continue; }
if (a.cx + a.xrad < m.cx - m.xrad) { continue; }
if (a.cy - a.yrad > m.cy + m.yrad) { continue; }
if (a.cy + a.yrad < m.cy - m.yrad) { continue; }
ta = Math.atan2(a.cy-m.cy, a.cx-m.cx);
// m.cx += Math.cos(ta) * (d - (m.rad+a.rad))*0.25;
// m.cy += Math.sin(ta) * (d - (m.rad+a.rad))*0.25;
nx = Math.cos(ta); ny = Math.sin(ta);
dot = nx*m.vx + ny*m.vy;
if (dot > 0)
{
m.vx -= nx * dot;
m.vy -= ny * dot;
}//endif
}//nexti
}//checkkcol
}
}
internal class xRect
{
public var cx:Number = 0;
public var cy:Number = 0;
public var vx:Number = 0;
public var vy:Number = 0;
public var xrad:Number = 16;
public var yrad:Number = 16;
}//xRect