Flash / Flex / ActionScript/Development/MouseEvent
Содержание
- 1 A custom mouse pointer
- 2 Add mouse listener to state
- 3 Add mouse move listener
- 4 Add mouse up and down listener
- 5 All types of mouse event
- 6 Click Test
- 7 Creating Mouse Interactions
- 8 Finding the mouse pointer"s position
- 9 Global Mouse Down Sensor
- 10 Handling Mouse Events "Globally"
- 11 mouseEnabled = false
- 12 Mouse Event Hierarchy
- 13 Mouse Events and Modifier Keys
- 14 Mouse Events and Overlapping Display Objects
- 15 Post-Event Screen Updates
- 16 Responding to Mouse and Key Events
- 17 Rollover Test
- 18 Using MouseEvent in Conjunction with the Mouse
A custom mouse pointer
<source lang="java">
package {
import flash.display.*; import flash.ui.*; import flash.events.*; import flash.geom.*; public class CustomMousePointer extends Sprite { public function CustomMousePointer ( ) { graphics.lineStyle(1); graphics.beginFill(0x0000FF, 1); graphics.lineTo(15, 5); graphics.lineTo(5, 15); graphics.lineTo(0, 0); graphics.endFill( ); var stageDetector:StageDetector = new StageDetector(this); stageDetector.addEventListener(StageDetector.ADDED_TO_STAGE, addedToStageListener); stageDetector.addEventListener(StageDetector.REMOVED_FROM_STAGE, removedFromStageListener); } private function addedToStageListener (e:Event):void { Mouse.hide( ); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener); } private function removedFromStageListener (e:Event):void { Mouse.show( ); stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); stage.removeEventListener(Event.MOUSE_LEAVE, mouseLeaveListener); } private function mouseLeaveListener (e:Event):void { visible = false; } private function mouseMoveListener (e:MouseEvent):void { var pointInParent:Point = parent.globalToLocal(new Point(e.stageX, e.stageY)); x = pointInParent.x; y = pointInParent.y; e.updateAfterEvent( ); if (!visible) { visible = true; } } }
}
</source>
Add mouse listener to state
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class GetChildAtExample extends Sprite { public function GetChildAtExample( ) { var color:Array = [ 0xFF0000, 0x990000, 0x660000, 0x00FF00, 0x009900, 0x006600, 0x0000FF, 0x000099, 0x000066, 0xCCCCCC ]; for ( var i:int = 0; i < 10; i++ ) { var circle:Shape = createCircle( color[i], 10 ); circle.x = i; circle.y = i + 10; // the + 10 adds padding from the top addChild( circle ); } stage.addEventListener( MouseEvent.CLICK, updateDisplay ); } public function updateDisplay( event:MouseEvent ):void { setChildIndex( getChildAt(0), numChildren - 1 ); } public function createCircle( color:uint, radius:Number ):Shape { var shape:Shape = new Shape( ); shape.graphics.beginFill( color ); shape.graphics.drawCircle( 0, 0, radius ); shape.graphics.endFill( ); return shape; } }
}
</source>
Add mouse move listener
<source lang="java">
package {
import flash.display.Sprite; import flash.events.*; import flash.geom.Point; public class Main extends Sprite { public function Main( ) { var circle:Sprite = new Sprite( ); circle.x = 10; circle.y = 10; circle.graphics.beginFill( 0xFF0000 ); circle.graphics.drawCircle( 0, 0, 5 ); circle.graphics.endFill( ); circle.addEventListener( MouseEvent.MOUSE_MOVE, handleMouseMove ); addChild( circle ); } private function handleMouseMove( event:MouseEvent ):void { trace( "local x: " + event.localX ); trace( "local y: " + event.localY ); var localPoint:Point = new Point( event.localX, event.localY ); var globalPoint:Point = event.target.localToGlobal( localPoint ); trace( "global x: " + globalPoint.x ); trace( "global y: " + globalPoint.y ); } }
}
</source>
Add mouse up and down listener
<source lang="java">
package {
import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite { private var isDrawing:Boolean; public function Main( ) { graphics.lineStyle( 20, 0xFFCC33 ); isDrawing = false; stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing ); stage.addEventListener( MouseEvent.MOUSE_MOVE, draw ); stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); } public function startDrawing( event:MouseEvent ):void { graphics.moveTo( mouseX, mouseY ); isDrawing = true; } public function draw( event:MouseEvent ):void { if ( isDrawing ) { graphics.lineTo( mouseX, mouseY ); } } public function stopDrawing( event:MouseEvent ):void { isDrawing = false; } }
}
</source>
All types of mouse event
<source lang="java">
MouseEventExample package { import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite {
public function Main () { var listener:Sprite = new Sprite(); listener.graphics.beginFill(0x0000ff, 1); listener.graphics.drawRect(0, 0, 200, 200); listener.graphics.endFill(); listener.doubleClickEnabled = true; addChild(listener); listener.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); listener.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); listener.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); listener.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); listener.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler); listener.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); listener.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler); } private function mouseDownHandler(mouseEvent:MouseEvent):void { trace("mouseDownHandler"); } private function mouseMoveHandler(mouseEvent:MouseEvent):void { trace("mouseMoveHandler"); } private function mouseOutHandler(mouseEvent:MouseEvent):void { trace("mouseOutHandler"); } private function mouseUpHandler(mouseEvent:MouseEvent):void { trace("mouseUpHandler"); } private function mouseWheelHandler(mouseEvent:MouseEvent):void { trace("mouseWheelHandler"); } private function mouseOverHandler(mouseEvent:MouseEvent):void { trace("mouseOverHandler"); } private function doubleClickHandler(mouseEvent:MouseEvent):void { trace("doubleClickHandler"); }
} }
</source>
Click Test
<source lang="java">
package {
import flash.display.Sprite; import flash.events.MouseEvent; [SWF(width=550, height=400)] public class Main extends Sprite { public function Main() { var square:Sprite = new Sprite(); square.graphics.lineStyle(2, 0x000000); square.graphics.beginFill(0xff0000); square.graphics.drawRect(0, 0, 100, 100); square.graphics.endFill(); addChild(square); square.doubleClickEnabled = true; square.addEventListener(MouseEvent.CLICK, onSquareClick); square.addEventListener(MouseEvent.DOUBLE_CLICK, onSquareDoubleClick); } private function onSquareClick(event:MouseEvent):void { trace("ouch!"); } private function onSquareDoubleClick(event:MouseEvent):void { trace("double ouch!"); } }
}
</source>
Creating Mouse Interactions
<source lang="java">
package {
import flash.display.Sprite; import flash.events.*; import flash.geom.Point; public class Main extends Sprite { public function Main( ) { var circle:Sprite = new Sprite( ); circle.x = 10; circle.y = 10; circle.graphics.beginFill( 0xFF0000 ); circle.graphics.drawCircle( 0, 0, 5 ); circle.graphics.endFill( ); circle.addEventListener( MouseEvent.MOUSE_MOVE, handleMouseMove ); addChild( circle ); } private function handleMouseMove( event:MouseEvent ):void { trace( "mouse move" ); } }
}
</source>
Finding the mouse pointer"s position
<source lang="java">
package {
import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends Sprite { public function Main ( ) { var textfield:TextField = new TextField( ); textfield.text = "Click here"; textfield.autoSize = TextFieldAutoSize.LEFT; textfield.x = 100; textfield.y = 100; stage.addChild(textfield); textfield.addEventListener(MouseEvent.CLICK, clickListener); } private function clickListener (e:MouseEvent):void { trace("Position in TextField"s coordinate space: ("+ e.localX + ", " + e.localY + ")"); trace("Position in Stage instance"s coordinate space: ("+ e.stageX + ", " + e.stageY + ")"); } }
}
</source>
Global Mouse Down Sensor
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class Main extends Sprite { public function Main ( ) { stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); } private function mouseDownListener (e:MouseEvent):void { trace("The primary mouse button was pressed."); } }
}
</source>
Handling Mouse Events "Globally"
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class Main extends Sprite { public function Main( ) { stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); } private function mouseMoveListener (e:MouseEvent):void { trace("The mouse moved."); } }
}
</source>
mouseEnabled = false
<source lang="java">
package {
import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends Sprite { public function Main ( ) { var circle:Sprite = new Sprite( ); circle.graphics.beginFill(0x999999, 1); circle.graphics.lineStyle(1); circle.graphics.drawEllipse(0, 0, 100, 100); var textfield:TextField = new TextField( ); textfield.text = "Click here"; textfield.autoSize = TextFieldAutoSize.LEFT; textfield.x = 30; textfield.y = 30; textfield.border = true; textfield.background = true; textfield.mouseEnabled = false; addChild(circle); addChild(textfield); circle.addEventListener(MouseEvent.CLICK, clickListener); } private function clickListener (e:MouseEvent):void { trace("User clicked: " + e.target); DisplayObject(e.target).x += 10; } }
}
</source>
Mouse Event Hierarchy
<source lang="java">
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite {
private var firstListener:Sprite = new Sprite(); private var secondListener:Sprite = new Sprite(); public function Main(){ firstListener.graphics.beginFill(0x0000ff, 1); firstListener.graphics.drawCircle(0, 0, 100); firstListener.graphics.endFill(); secondListener.graphics.beginFill(0x00ff00, 1); secondListener.graphics.drawCircle(0, 0, 30); secondListener.graphics.endFill(); addChild(firstListener); addChild(secondListener); firstListener.y = 300; secondListener.y = 250; this.stage.addEventListener(MouseEvent.MOUSE_DOWN, mainMouseDown); firstListener.addEventListener(MouseEvent.MOUSE_DOWN, firstMouseDown); secondListener.addEventListener(MouseEvent.MOUSE_DOWN, secondMouseDown); this.stage.addEventListener(MouseEvent.MOUSE_MOVE, mainMouseMove); firstListener.addEventListener(MouseEvent.MOUSE_MOVE, firstMouseMove); secondListener.addEventListener(MouseEvent.MOUSE_MOVE, secondMouseMove); } private function mainMouseMove(me:MouseEvent):void { trace(" stage move "); } private function firstMouseMove(me:MouseEvent):void { trace("first move "); } private function secondMouseMove(me:MouseEvent):void { trace("second move"); } private function mainMouseDown(me:MouseEvent):void { trace(" stage down "); } private function firstMouseDown(me:MouseEvent):void { trace("first down "); } private function secondMouseDown(me:MouseEvent):void { trace("second down "); }
} }
</source>
Mouse Events and Modifier Keys
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class Main extends Sprite { public function Main() { stage.addEventListener(MouseEvent.CLICK, clickListener); } private function clickListener (e:MouseEvent):void { if (e.shiftKey) { trace("Shift+click detected"); } } }
}
</source>
Mouse Events and Overlapping Display Objects
<source lang="java">
package {
import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends Sprite { public function Main ( ) { var circle:Sprite = new Sprite( ); circle.graphics.beginFill(0x999999, 1); circle.graphics.lineStyle(1); circle.graphics.drawEllipse(0, 0, 100, 100); var textfield:TextField = new TextField( ); textfield.text = "Click here"; textfield.autoSize = TextFieldAutoSize.LEFT; textfield.x = 30; textfield.y = 30; textfield.border = true; textfield.background = true; addChild(circle); addChild(textfield); circle.addEventListener(MouseEvent.CLICK, clickListener); } private function clickListener (e:MouseEvent):void { trace("User clicked: " + e.target); DisplayObject(e.target).x += 10; } }
}
</source>
Post-Event Screen Updates
<source lang="java">
package{
import flash.display.GradientType; import flash.display.Sprite; import flash.geom.*; import flash.events.*; import flash.ui.*; public class Main extends Sprite { public function Main() { var triangle:Sprite = new Sprite( ); triangle.graphics.lineStyle(1); triangle.graphics.beginFill(0x00FF00, 1); triangle.graphics.moveTo(25, 0); triangle.graphics.lineTo(50, 25); triangle.graphics.lineTo(0, 25); triangle.graphics.lineTo(25, 0); triangle.graphics.endFill( ); triangle.x = 200; triangle.y = 100; triangle.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); } private function mouseMoveListener (e:MouseEvent):void { var pointInParent:Point = parent.globalToLocal(new Point(e.stageX,e.stageY)); x = pointInParent.x; y = pointInParent.y; e.updateAfterEvent( ); if (!visible) { visible = true; } } }
}
</source>
Responding to Mouse and Key Events
<source lang="java">
package {
import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite { private var _sprite:Sprite; public function Main( ) { _sprite = new Sprite( ); addChild(_sprite); _sprite.graphics.beginFill(0xffffff); _sprite.graphics.drawRect(0, 0, 400, 400); _sprite.graphics.endFill( ); _sprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); _sprite.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); } private function onMouseDown(event:MouseEvent):void { _sprite.graphics.lineStyle(1, 0, 1); _sprite.graphics.moveTo(mouseX, mouseY); _sprite.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); } private function onMouseUp(event:MouseEvent):void { _sprite.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); } private function onMouseMove(event:MouseEvent):void { _sprite.graphics.lineTo(mouseX, mouseY); } }
}
</source>
Rollover Test
<source lang="java">
package {
import flash.display.Sprite; import flash.events.MouseEvent; [SWF(width=550, height=400)] public class Main extends Sprite { private static var UP_COLOR:uint = 0xFF0000; private static var ROLLOVER_COLOR:uint = 0x0000FF; private var _square:Sprite = new Sprite(); public function Main() { drawSquare(UP_COLOR); addChild(_square); _square.doubleClickEnabled = true; _square.addEventListener(MouseEvent.CLICK, onSquareClick); _square.addEventListener(MouseEvent.DOUBLE_CLICK, onSquareDoubleClick); _square.addEventListener(MouseEvent.ROLL_OVER, onSquareRollOver); _square.addEventListener(MouseEvent.ROLL_OUT, onSquareRollOut); } private function drawSquare(color:uint):void { _square.graphics.clear(); _square.graphics.lineStyle(2, 0x000000); _square.graphics.beginFill(color); _square.graphics.drawRect(0, 0, 100, 100); _square.graphics.endFill(); } private function onSquareClick(event:MouseEvent):void { trace("ouch!"); } private function onSquareDoubleClick(event:MouseEvent):void { trace("double ouch!"); } private function onSquareRollOver(event:MouseEvent):void { drawSquare(ROLLOVER_COLOR); } private function onSquareRollOut(event:MouseEvent):void { drawSquare(UP_COLOR); } }
}
</source>
Using MouseEvent in Conjunction with the Mouse
<source lang="java">
package {
import flash.display.Sprite; import flash.events.MouseEvent; import flash.ui.Mouse; public class Main extends Sprite { private var circleMouse:Sprite = new Sprite(); private var squareMouse:Sprite = new Sprite(); private var currentMouse:Sprite = new Sprite(); private var useSquareField:Sprite = new Sprite(); private var useCircleField:Sprite = new Sprite(); public function Main() { useSquareField.graphics.beginFill(0xFFFFFF, 1); useSquareField.graphics.drawRect(0, 0, 100, 100); useSquareField.graphics.endFill(); useSquareField.name = "square"; useSquareField.x = 200; useCircleField.graphics.beginFill(0xFFFFFF, 1); useCircleField.graphics.drawRect(0, 0, 100, 100); useCircleField.name = "circle"; useCircleField.graphics.endFill(); addChild(useCircleField); addChild(useSquareField); useCircleField.addEventListener(MouseEvent.ROLL_OVER, useCircle); useSquareField.addEventListener(MouseEvent.ROLL_OVER, useSquare); useCircleField.addEventListener(MouseEvent.ROLL_OUT, showMouse); useSquareField.addEventListener(MouseEvent.ROLL_OUT, showMouse); circleMouse.graphics.beginFill(0x00ff00, 1); circleMouse.graphics.drawCircle(0, 0, 5); circleMouse.graphics.endFill(); currentMouse = new Sprite(); squareMouse.graphics.beginFill(0xff0000, 1); squareMouse.graphics.drawRect(0, 0, 10, 10); squareMouse.graphics.endFill(); this.stage.addEventListener(MouseEvent.MOUSE_MOVE, moveNewMouse); } private function moveNewMouse(mouseEvent:MouseEvent):void { currentMouse.x = mouseEvent.stageX + 5; currentMouse.y = mouseEvent.stageY + 5; mouseEvent.updateAfterEvent(); } private function useSquare(mouseEvent:MouseEvent):void { Mouse.hide(); addChild(squareMouse); currentMouse = squareMouse; } private function useCircle(mouseEvent:MouseEvent):void { Mouse.hide(); addChild(circleMouse); currentMouse = circleMouse; } private function showMouse(mouseEvent:MouseEvent):void { if((mouseEvent.target as Sprite) == useSquareField) { removeChild(squareMouse); } else { removeChild(circleMouse); } currentMouse = new Sprite(); Mouse.show(); } }
}
</source>