
Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
/* * * * * * * * * *
* *
* @author wolsh *
* *
\* * * * * * * * * */
public class Main extends Sprite
{
private var _mc :Sprite = new Sprite();
private var _center :Sprite = new Sprite();
private var _floor :Sprite = new Sprite();
private var _centerX :Number;
private var _centerY :Number;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.showDefaultContextMenu = false;
// entry point
_floor.graphics.beginFill(0xEEEEEE);
_floor.graphics.drawRect(0, 0, 400, 400);
this.addChild(_floor);
_floor.x = _floor.y = 100;
_center.graphics.beginFill(0x00FF00);
_center.graphics.drawCircle(0, 0, 2);
_center.x = _center.y = 200;
_floor.addChild(_center);
_mc.graphics.beginFill(0x000000);
_mc.graphics.drawCircle(0, 0, 5);
_mc.x = _mc.y = 200;
_floor.addChild(_mc);
_floor.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
_floor.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
}
private function onRollOut(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
}
private function onRollOver(event:MouseEvent):void
{
_centerX = _floor.mouseX - (_floor.mouseX - _mc.x) / 2;
_centerY = _floor.mouseY - (_floor.mouseY - _mc.y) / 2;
_center.x = _centerX;
_center.y = _centerY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
}
private function onMove(event:MouseEvent):void
{
_mc.x = Math.max(0, Math.min(_centerX - (_floor.mouseX - _centerX), 400));
_mc.y = Math.max(0, Math.min(_centerY - (_floor.mouseY - _centerY), 400));
event.updateAfterEvent();
}
}
}