Захват действий мыши

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

При щелчках мыши создаются события мыши, которые можно использовать для вызова интерактивной функциональности. Можно добавить в рабочую область прослушиватель событий, чтобы улавливать события, происходящие в любом месте 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; 
}