Interakcja z myszą

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Kliknięcia myszy wywołują zdarzenia, które mogą inicjować operacje interaktywne. Możliwe jest dodanie do stołu montażowego detektora, który będzie wykrywał zdarzenia myszy zachodzące w dowolnym miejscu pliku SWF. Możliwe jest również dodawanie detektorów zdarzeń do umieszczonych na stole obiektów potomnych względem klasy InteractiveObject (no. Sprite lub MovieClip); te detektory są wywoływane po kliknięciu obiektu.

Podobnie jak zdarzenia z klawiatury, również zdarzenia związane z myszą uczestniczą w propagacji. W poniższym przykładzie obiekt square jest podrzędny wobec stołu montażowego, dlatego kliknięcie kwadratu powoduje wywołanie zdarzenia zarówno z ikonki square, jak i z obiektu 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 + "]"); 
}

W poprzednim przykładzie zwraca uwagę fakt, że zdarzenie pochodzące z myszy zawiera informacje o miejscu kliknięcia. Właściwości localX oraz localY zawierają położenie kliknięcia względem obiektu znajdującego się najniżej w łańcuchu wyświetlania. Na przykład kliknięcie w lewym górnym rogu obiektu square spowoduje przekazanie lokalnych współrzędnych [0,0], ponieważ takie współrzędne ma punkt rejestracji obiektu square. Dostępne są także właściwości stageX i stageY zawierające wartości współrzędnych globalnych miejsce klikniętego na stole montażowym. To samo kliknięcie spowoduje przekazanie współrzędnych globalnych [50,50], ponieważ obiekt square został przemieszczony do tych współrzędnych. Obie te pary współrzędnych są użyteczne, a wybór jednej z nich zależy od planowanej reakcji na zdarzenie.

Obiekt MouseEvent zawiera także właściwości altKey, ctrlKey i shiftKey typu Boolean. Umożliwiają one sprawdzenie, czy w momencie kliknięcia był naciśnięty klawisz Alt, Ctrl lub Shift.

Przeciąganie obiektów Sprite po stole mntażowym

Korzystając z metody startDrag() klasy Sprite, można umożliwić użytkownikowi przeciąganie obiektu Sprite po stole montażowym. Poniższy przykładowy kod ilustruje ten mechanizm:

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); 
}

Więcej szczegółów zawiera część dotycząca przeciągania za pomocą myszy w sekcji Zmiana położenia.

Przeciąganie i upuszczanie w środowisku AIR

W środowisku Adobe AIR dostępny jest mechanizm przeciągania danych do i z aplikacji. Szczegółowe informacje na ten temat zawiera sekcja Przeciąganie i upuszczanie w środowisku AIR.

Dostosowywanie kursora myszy

Kursor (wskaźnik) myszy można ukryć lub podmienić dla dowolnego obiektu wyświetlanego na stole montażowym. Aby ukryć kursor myszy, należy wywołać metodę Mouse.hide(). Dostosowywanie kursora myszy odbywa się poprzez wywołania metody Mouse.hide(), wykrywanie zdarzeń MouseEvent.MOUSE_MOVE na stole montażowym i ustawianiu współrzędnych obiektu wyświetlanego (kursora niestandardowego) na równe właściwościom stageX oraz stageY zdarzenia. Poniższy przykład ilustruje podstawową realizację tego zadania:

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; 
}