該代碼測試和工程類DummyCircle只是畫一個圓圈中心對其g ^實例化後的raphics對象。
private var plate:Sprite;
private var stage:Stage;
public function execute(stage:Stage):void
{
this.stage = stage;
// number of pieces around the centered plate
const numPieces:int = 8;
const plateRadius:int = 50;
plate = new DummyCircle(plateRadius);
// center plate on the stage
plate.x = stage.stageWidth/2;
plate.y = stage.stageHeight/2;
stage.addChild(plate);
// for each piece to be created
for (var i:int = 0; i < numPieces; i++) {
// instantiate the appropriate sprite, here with a radius argument
var piece:Sprite = new DummyCircle(plateRadius/numPieces);
// add event listener for dragging
piece.addEventListener(MouseEvent.MOUSE_DOWN, mouseListener);
piece.addEventListener(MouseEvent.MOUSE_UP, mouseListener);
// pieces are in the top left corner of the stage, plate is centered
piece.x = 0;
piece.y = 0;
// a transformation matrix is used for positioning the pieces
// get the current matrix
var pieceMatrix:Matrix = piece.transform.matrix;
// move a bit more than the plate radius on the y axis
pieceMatrix.translate(0, -plateRadius * 1.5);
// rotate around the origin
pieceMatrix.rotate(i * (2 * Math.PI/numPieces));
// move again, this time to our plate
pieceMatrix.translate(plate.x, plate.y);
// apply the matrix
piece.transform.matrix = pieceMatrix;
stage.addChild(piece);
}
}
private function mouseListener(e:MouseEvent):void
{
if (e.target is Sprite) {
var target:Sprite = e.target as Sprite;
if (e.type == MouseEvent.MOUSE_UP) {
target.stopDrag();
if (target.hitTestObject(plate)) {
stage.removeChild(target);
}
}
else if (e.type == MouseEvent.MOUSE_DOWN) {
target.startDrag();
}
}
}