Found this piece of code over at Kirupa that explains how to do a drag-and-select implementation in ActionScript 3.0:
import flash.geom.*;
var drawingBox:Sprite;/*resized sprite that acts as a selector*/
var stageObjects:Array = createRandomObjects(20);/*array of stage objects that might be selected*/
var mouseStart:Point;
/*drawing properties of drawingBox*/
var stroke:GraphicsStroke = new GraphicsStroke();
stroke.thickness=1;
stroke.fill = new GraphicsSolidFill(0x333399, .5);
var fill:GraphicsSolidFill = new GraphicsSolidFill(0x444444,.5);
var graph:Vector.<IGraphicsData>;
var path:GraphicsPath;
stage.addEventListener(MouseEvent.MOUSE_DOWN,MD,false,0,true);/*start drawing box*/
stage.addEventListener(MouseEvent.MOUSE_UP,MU,false,0,true);/*select objects*/
function createRandomObjects(n:int):Array
{
var a:Array=new Array();
for(var i:int=0;i<n;i++)
{
var s:Sprite = new Sprite;
s.graphics.beginFill(Math.random()*0xFFFFFF);
s.graphics.drawRect(0,0,20,20);
s.x=Math.random()*stage.stageWidth;
s.y=Math.random()*stage.stageHeight;
s.alpha=.5;
s.name = String(i);
a.push(s);
addChild(s);
}
return(a);
}
function MD(e:MouseEvent):void
/*MOUSE DOWN - start drawing square*/
{
// removes previous one
if(drawingBox!=null)drawingBox.parent.removeChild(drawingBox);
drawingBox=new Sprite;
addChild(drawingBox);
mouseStart=new Point(mouseX,mouseY);
addEventListener(Event.ENTER_FRAME, EF,false,0,true);
for(var i:int=0; i<stageObjects.length; i++)
{
stageObjects[i].alpha=.5;
stageObjects[i].rotation=0;
}
}
function MU(e:MouseEvent):void
/*MOUSE UP - remove square and hit test everything under it*/
{
removeEventListener(Event.ENTER_FRAME, EF,false);
trace('Selected objects are:');
/*run a hit test for drawingBox against stageObjects*/
for(var i:int=0; i<stageObjects.length; i++)
{
if(drawingBox.hitTestObject(stageObjects[i]))
{
stageObjects[i].alpha=1;
stageObjects[i].rotation=45;
trace('Hit ' + stageObjects[i].name);
}
}
drawingBox.graphics.clear();
}
function EF(e:Event):void
/*ENTER FRAME - redraws the selction box based on mouse pointer location every frame*/
{
drawingBox.graphics.clear();
path = RR(mouseStart.x,mouseStart.y,mouseX,mouseY);
graph = new Vector.<IGraphicsData>();
stroke.fill = new GraphicsSolidFill(0xFF0000,1);
graph.push(stroke, fill, path);
drawingBox.graphics.drawGraphicsData(graph);
}
function RR(sx:Number, sy:Number, ex:Number, ey:Number):GraphicsPath
/*RETURN RECTANGLE - returns a Graphics path for a rectangle*/
{
var p:GraphicsPath=new GraphicsPath;
p.moveTo(sx,sy);
p.lineTo(ex,sy);
p.lineTo(ex,ey);
p.lineTo(sx,ey);
p.lineTo(sx,sy);
return(p);
}