package { import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; /** * @author SinSoul * @http://www.cnblogs.com/sinsoul **/ public class Main extends Sprite { private var ballsArray:Array; public function Main():void { ballsArray = []; var _i:uint = 30; while (_i--) { var _ball:Dispatch = new Dispatch; _ball.x = Math.random () * stage.stageWidth; _ball.y = Math.random () * stage.stageHeight; //这里就是监听的地方 addChild (_ball).addEventListener (Dispatch.Dispatch_MOVE,DispatchMove ); ballsArray .push (_ball); } } private function DispatchMove(e:Event ):void { var _ball:Dispatch = e.target as Dispatch; var _array:Array = ballsArray .concat (); _array.splice (_array.indexOf (_ball), 1); for each (var _b:Dispatch in _array) { if (Point.distance(new Point(_b.x, _b.y), new Point(_ball.x, _ball.y)) < 20) { _ball.color = _b.color = 0xff0000; ballsArray.splice (ballsArray.indexOf (_ball), 1); ballsArray.splice (ballsArray.indexOf (_b), 1); //return; } } } } }
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.ColorTransform; /** * @author SinSoul * @http://www.cnblogs.com/sinsoul **/ public class Dispatch extends Sprite { public static const Dispatch_MOVE:String = "DispatchMove"; public function Dispatch():void { stage?init(null):addEventListener (Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { graphics.beginFill(0x00); graphics.drawCircle(0, 0, 10); buttonMode = true; addEventListener (MouseEvent.MOUSE_DOWN, mouseDown); // removeEventListener(Event.ADDED_TO_STAGE, init); } //自己不能做的事,发出事件,请求有管辖权的对象去做
//这里是发出事件的地方 private function mouseMove(e:MouseEvent ):void { dispatchEvent (new Event(Dispatch.BALL_MOVE)); } //自己能做的事,自己做 private function mouseDown(e:MouseEvent ):void { startDrag (); stage.addEventListener (MouseEvent.MOUSE_MOVE, mouseMove ); stage.addEventListener (MouseEvent.MOUSE_UP, mouseUp); } private function mouseUp(e:MouseEvent ):void { stopDrag (); stage.removeEventListener (MouseEvent.MOUSE_MOVE, mouseMove ); stage.removeEventListener (MouseEvent.MOUSE_UP, mouseUp); } public function set color(_c:uint):void { var _ctf:ColorTransform = new ColorTransform; _ctf.color = _c; transform.colorTransform = _ctf; // stopHandler(); } private function stopHandler():void { mouseUp(null); buttonMode = false; removeEventListener (MouseEvent.MOUSE_DOWN, mouseDown); } } }