flash on 2010-2-26
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.geom.Point;
public class FlashTest extends Sprite {
private var _container:Sprite;
private var _children:Array;
private var _ref:Sprite;
private var _division:Sprite;
public function FlashTest()
{
_children = [];
_container = new Sprite();
_container.x = this.stage.stageWidth>>1;
_container.y = this.stage.stageHeight>>1;
with(_container.graphics)
{
beginFill(0xFFFFFF);
lineStyle(1, 0x000000);
drawRect(-200, -200, 400, 400);
endFill();
moveTo(0, -200);
lineTo(0, 200);
moveTo(-200, 0);
lineTo(200, 0);
}
this.addChild(_container);
this._ref = createPoint(100, 0, 0x0000FF);
_container.addChild(this._ref);
this._division = new Sprite();
_container.addChild(this._division);
updateDivision();
this._container.addEventListener(MouseEvent.CLICK, onClick);
this._container.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onClick(evt:MouseEvent):void
{
if (evt.ctrlKey)
{
this._ref.x = evt.localX;
this._ref.y = evt.localY;
updateDivision();
}
else
{
var child:Sprite = createPoint(evt.localX, evt.localY, 0xFF0000);
this._container.addChild(child);
_children.push(child);
}
}
private function createPoint(x:int, y:int, color:uint):Sprite
{
var child:Sprite = new Sprite();
with(child.graphics)
{
beginFill(color);
drawCircle(0,0,5);
endFill();
}
child.x = x;
child.y = y;
return child;
}
private function updateDivision():void
{
with(_division.graphics)
{
clear();
lineStyle(1, 0xCC33CC);
moveTo(0,0);
lineTo(- _ref.y, _ref.x);
moveTo(0,0);
lineTo(_ref.y, - _ref.x);
}
}
private function onEnterFrame(evt:Event):void
{
for each(var child:Sprite in _children)
testMethod(child);
}
private function testMethod(target:Sprite):void
{
var d:Point = new Point(this._ref.x-target.x, this._ref.y-target.y);
var v:Point = new Point(-d.y, d.x);
v.normalize(6);
var ct:ColorTransform = new ColorTransform();
if (this._ref.x * target.x + this._ref.y * target.y >= 0)
{
ct.color = 0xFF0000;
target.transform.colorTransform = ct;
target.x += v.x;
target.y += v.y;
}
else
{
ct.color = 0xFF9900;
target.transform.colorTransform = ct;
target.x -= 2;
target.y *= .95;
}
}
}
}