捕获鼠标输入

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

鼠标单击将创建鼠标事件,这些事件可用来触发交互式功能。您可以将事件侦听器添加到舞台上以侦听在 SWF 文件中任何位置发生的鼠标事件。也可以将事件侦听器添加到舞台上从 InteractiveObject 进行继承的对象(例如,Sprite 或 MovieClip)中;单击该对象时将触发这些侦听器。

与键盘事件一样,鼠标事件也会冒泡。在下面的示例中,由于 square 是 Stage 的子级,因此,单击正方形时,将从 Sprite 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

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