При щелчках мыши создаются события мыши, которые можно использовать для вызова интерактивной функциональности. Можно добавить в рабочую область прослушиватель событий, чтобы улавливать события, происходящие в любом месте SWF-файла. Также можно добавить прослушиватели событий к объектам в рабочей области, которые являются наследниками InteractiveObject (например, Sprite или MovieClip). Эти прослушиватели вызываются при щелчке по объекту.
Как и в случае с событиями клавиатуры, события мыши передаются вверх по иерархии. В следующем примере объект
square
является дочерним объектом объекта Stage, поэтому при щелчке мышью событие отправляется как спрайтом
square
, так и объектом Stage:
var square:Sprite = new Sprite();
square.graphics.beginFill(0xFF0000);
square.graphics.drawRect(0,0,100,100);
square.graphics.endFill();
square.addEventListener(MouseEvent.CLICK, reportClick);
square.x =
square.y = 50;
addChild(square);
stage.addEventListener(MouseEvent.CLICK, reportClick);
function reportClick(event:MouseEvent):void
{
trace(event.currentTarget.toString() + " dispatches MouseEvent. Local coords [" + event.localX + "," + event.localY + "] Stage coords [" + event.stageX + "," + event.stageY + "]");
}
В предыдущем примере событие мыши содержит информацию о положении щелчка. Свойства
localX
и
localY
содержат положение щелчка на низшем дочернем объекте в цепи отображения. Например, при щелчке в левом верхнем углу объекта
square
возвращаются локальные координаты [0,0], потому что это регистрационная точка
square
. Также свойства
stageX
и
stageY
могут указывать на глобальные координаты щелчка в рабочей области. Тот же щелчок возвратит для этих координат значение [50,50], потому что объект
square
переместился. Могут пригодиться обе пары координат в зависимости от того, каким образом вы хотите отвечать на действия пользователя.
Примечание.
В полноэкранном режиме можно сделать такие настройки, чтобы в приложении использовалась блокировка мыши. При блокировке мыши курсор отключается, и включается несвязанное движение мыши. Дополнительные сведения см. в разделе «
Работа в полноэкранном режиме
».
Объект MouseEvent также содержит логические свойства
altKey
,
ctrlKey
и
shiftKey
. Эти свойства можно использовать для проверки того, нажаты ли во время щелчка клавиши Alt, Ctrl или Shift.
Перетаскивание спрайтов в рабочей области
Можно предоставить пользователям возможность перетаскивать объекты Sprite по рабочей области с помощью метода
startDrag()
класса Sprite. Следующий код иллюстрирует это:
import flash.display.Sprite;
import flash.events.MouseEvent;
var circle:Sprite = new Sprite();
circle.graphics.beginFill(0xFFCC00);
circle.graphics.drawCircle(0, 0, 40);
var target1:Sprite = new Sprite();
target1.graphics.beginFill(0xCCFF00);
target1.graphics.drawRect(0, 0, 100, 100);
target1.name = "target1";
var target2:Sprite = new Sprite();
target2.graphics.beginFill(0xCCFF00);
target2.graphics.drawRect(0, 200, 100, 100);
target2.name = "target2";
addChild(target1);
addChild(target2);
addChild(circle);
circle.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown)
function mouseDown(event:MouseEvent):void
{
circle.startDrag();
}
circle.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
function mouseReleased(event:MouseEvent):void
{
circle.stopDrag();
trace(circle.dropTarget.name);
}
Дополнительные сведения см. в разделе о создании взаимодействия путем перетаскивания с помощью мыши в разделе «
Изменение положения
».
Перетаскивание в AIR
В Adobe AIR можно включить поддержку перетаскивания, чтобы пользователи могли перетаскивать данные в приложение и за его пределы. Дополнительные сведения см. в разделе «
Перетаскивание в AIR
».
Персонализация указателя мыши
Указатель мыши (курсор) для любого объекта в рабочей области можно скрыть или заменить. Чтобы скрыть указатель мыши, нужно вызвать метод
Mouse.hide()
. Можно изменить курсор, вызвав метод
Mouse.hide()
, прослушивающий рабочую область на предмет события
MouseEvent.MOUSE_MOVE
, и указав в качестве координат экранного объекта (вашего собственного курсора) свойства события
stageX
и
stageY
. В примере ниже показано выполнение этой задачи:
var cursor:Sprite = new Sprite();
cursor.graphics.beginFill(0x000000);
cursor.graphics.drawCircle(0,0,20);
cursor.graphics.endFill();
addChild(cursor);
stage.addEventListener(MouseEvent.MOUSE_MOVE,redrawCursor);
Mouse.hide();
function redrawCursor(event:MouseEvent):void
{
cursor.x = event.stageX;
cursor.y = event.stageY;
}