Добавлено через 2 минуты
Ну, если я спрашиваю, значит смысл - таки есть. Задача стоит такая - движение по щелчку и удерживанию ЛКМ, а при удерживании Shift, объект стоит на месте. С мышью реализовал алгоритм, но, опять же, непонятно - можно ли сделать это проще?

Код AS3:
import flash.events.MouseEvent;
import flash.events.Event;
var toX,toY;
var characterSpeed = 5;
var mouseIsToggled = false; // зажата ЛКМ
var mouseIsClicked = false; // клик мыши
function mouseClick(event:MouseEvent):void
{
mouseIsClicked = true;
if (event.target != mc)
{
mouseIsToggled = true;
removeEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);
toX = event.stageX;
toY = event.stageY;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
function mouseUnclick(event:MouseEvent):void
{
mouseIsToggled = false;
}
function mouseToggled(event:MouseEvent):void
{
if ( mouseIsClicked && mouseIsToggled && event.target != mc)
{
toX = event.stageX;
toY = event.stageY;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
else
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);
}
}
function onEnterFrame(e:Event)
{
moveToCoordinates(toX, toY);
}
function moveToCoordinates(toX:Number, toY:Number)
{
var theta = Math.atan2 (toY - mc.y, toX - mc.x);
mc.x += Math.cos (theta) * (characterSpeed);
mc.y += Math.sin (theta) * (characterSpeed);
if (Math.abs(mc.y - toY) < 5 && Math.abs(mc.x - toX) < 5)
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
if (! mouseIsToggled)
{
mouseIsClicked = false;
}
}
}
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUnclick);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);