Actionscript 3.0 鼠标事件

关于Actionscript 3.0的事件机制,以后分模块一个一个介绍,最后形成一个完整的文档。看了第一章,就说说鼠标事件,顺便说下我遇到的一个问题。Actionscript 3.0鼠标事件无非就是监听和捕获鼠标事件,比如Click,DoubleClick等,AS3中鼠标事件包是在flash.events.MouseEvent中。
在这里贴一个简单ActionScript 3.0实现写字板程序代码,结合代码来理解鼠标的监听,捕获处理过程。


代码如下:

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent; //import MouseEvent 包
/**
* @Written by Leezhm, 6th Jun, 2009
* @Contact : Leezhm@126.com
* @author : Leezhm
*
**Last Modified by Leezhm on 6th Jun, 2009
*
*/
[SWF(height = "450", width = "600", backgroundColor = "0xFFFFFF", frameRate = "31")] //设置应用程序属性
public class Main extends Sprite
{
public function Main():void
{
if (stage)
{
Init();
}
else
{
addEventListener(Event.ADDED_TO_STAGE, Init);
}
}
private function Init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, Init);
// entry point
addEventListener(Event.ENTER_FRAME, OnEnterFrameHandler); //监听ENTER_FRAME事件,一个重要的事件
}
private function OnEnterFrameHandler(e:Event):void //ENTER_FRAME事件的处理函数
{
this.DrawGraphic();
}
private function DrawGraphic():void
{
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, OnMouseDownHandler); //监听鼠标Down事件
}
private function OnMouseDownHandler(e:MouseEvent):void //处理鼠标Down事件
{
this.graphics.lineStyle(2, 0, 1);
this.graphics.moveTo(this.mouseX, this.mouseY);
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, OnMouseMoveHandler); //监听鼠标MOVE事件
}
private function OnMouseMoveHandler(e:MouseEvent):void //鼠标MOVE事件处理函数
{
this.graphics.lineTo(this.mouseX, this.mouseY);
this.stage.addEventListener(MouseEvent.MOUSE_UP, OnMouseUpHandler); //监听鼠标UP事件
}
private function OnMouseUpHandler(e:MouseEvent):void //处理鼠标UP事件
{ // 移除对鼠标DOWN、MOVE和UP事件的监听
this.stage.removeEventListener(MouseEvent.MOUSE_DOWN, OnMouseDownHandler);
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, OnMouseMoveHandler);
this.stage.removeEventListener(MouseEvent.MOUSE_UP, OnMouseUpHandler);
}
}
}

其实看上面的代码就很简单地理解Actionscript 3.0中鼠标事件的处理过程,顺便传一张效果图片。
     
好了说一个我曾经犯的错误,代码如下:


代码如下:

package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class A extends Sprite
{
public function A()
{
graphics.beginFill(0xFF0000);
graphics.drawCircle(100,100,40);
graphics.endFill();
addEventListener(MouseEvent.CLICK, testclick);
}
private function testclick(event:MouseEvent):void {
trace("Hello World!!!");
}
}
}

实际上上面的这段代码并不响应鼠标的CLICK事件,为什么,开始我也花了很长时间来查找原因。其实这涉及到Actionscript 3.0的事件实现机制,在这里简单解释下:
原因很简单,因为上面那样的一个文档类是空的,根本就没有任何显示对象,所以就不会响应鼠标事件了(那个DrawCircle 不能算显示对象,它只能算是一个背景而已,并不在Actionscript的显示列表中 ,所以Actionscript事件机制中就不可能向它分发事件消息)。但下面对以上代码做一下修改就可以。


代码如下:

package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class A extends Sprite {
public function A() {
var _sp:Sprite=new Sprite()
_sp.graphics.beginFill(0xFF0000);
_sp.graphics.drawCircle(100,100,40);
_sp.graphics.endFill();
addChild(sp)
_sp.addEventListener(MouseEvent.CLICK, testclick);
}
private function testclick(event:MouseEvent):void {
trace("Hello World!!!");
}
}
}

对比俩代码就可以发现,后面的加了一个显示对象,并在显示对象上监听鼠标事件。 当然也可以想第一段代码中那样在Stage上监听。
注意,直接this.addEventListener这样来监听的是root,并不是Stage这样的DisplayObject对象,同样是不可以的。

(0)

相关推荐

  • Actionscript 3.0 鼠标事件

    关于Actionscript 3.0的事件机制,以后分模块一个一个介绍,最后形成一个完整的文档.看了第一章,就说说鼠标事件,顺便说下我遇到的一个问题.Actionscript 3.0鼠标事件无非就是监听和捕获鼠标事件,比如Click,DoubleClick等,AS3中鼠标事件包是在flash.events.MouseEvent中. 在这里贴一个简单ActionScript 3.0实现写字板程序代码,结合代码来理解鼠标的监听,捕获处理过程. 复制代码 代码如下: package { import

  • vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作

    Vue 事件处理方法 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码. v-on:click 单击事件 <button class=" btn btn-info" v-on:click="add(1)"> + + </button> <button class=" btn btn-danger " v-on:click="subtract(1)">

  • JavaScript事件学习小结(五)js中事件类型之鼠标事件

    相关阅读: JavaScript事件学习小结(五)js中事件类型之鼠标事件 http://www.jb51.net/article/86259.htm JavaScript事件学习小结(一)事件流 http://www.jb51.net/article/86261.htm javaScript事件学习小结(四)event的公共成员(属性和方法) http://www.jb51.net/article/86262.htm JavaScript事件学习小结(二)js事件处理程序 http://www

  • 详解Java图形化编程中的鼠标事件设计

    鼠标事件的事件源往往与容器相关,当鼠标进入容器.离开容器,或者在容器中单击鼠标.拖动鼠标时都会发生鼠标事件.java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionListener接口. MouseListener接口 MouseListener接口能处理5种鼠标事件:按下鼠标,释放鼠标,点击鼠标.鼠标进入.鼠标退出.相应的方法有: (1) getX():鼠标的X坐标 (2) getY():鼠标的Y坐标 (3) getModifiers():获取鼠标的左键或右键

  • JavaScript焦点事件、鼠标事件和滚轮事件使用详解

    焦点事件 一般利用这些事件与document.hasFocus()方法和document.activeElement属性配合.主要有: blur:元素失去焦点,不会冒泡: DOMFocusIn:同HTML事件focus,于DOM3遭废弃,选用focusin: DOMFocusOut:同HTML事件blur,于DOM3遭废弃,选用focusout: focus:元素获得焦点,不回冒泡: focusin:获得焦点,与HTML事件focus等价,但会冒泡: focusout:失去焦点,与HTML事件b

  • JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例

    JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例 document.oncontextmenu = function(){return false}; //禁止鼠标右键菜单显示 var res = document.getElementById('box'); //找到id为box的div document.body.onmouseup = function(e){ //在body里点击触发事件 if(e.button===2){ //如果button=1(鼠标左键),butto

  • 关于js中的鼠标事件总结

    js中鼠标事件主要有onclick,onmousedown,onmouseup,oncontextmenu,ondblclick,所有的这些事件都包含有一个事件对象event,当然在IE低版本下,event对象是挂在window底下的.这个我们另行讨论. 1.通过html添加事件 <input type="button" click="alert(1)"/> 2.通过DOM0级方式添加事件 <input type="button"

  • 浅析Android 模拟键盘鼠标事件

    通过Socket + Instrumentation实现模拟键盘鼠标事件主要通过以下三个部分组成:Socket编程:实现PC和Emulator通讯,并进行循环监听Service服务:将Socket的监听程序放在Service中,从而达到后台运行的目的.这里要说明的是启动服务有两种方式,bindService和startService,两者的区别是,前者会使启动的Service随着启动Service的Activity的消亡而消亡,而startService则不会这样,除非显式调用stopServi

  • Python中pygame的mouse鼠标事件用法实例

    本文实例讲述了Python中pygame的mouse鼠标事件用法.分享给大家供大家参考,具体如下: pygame.mouse提供了一些方法获取鼠标设备当前的状态 ''' pygame.mouse.get_pressed - get the state of the mouse buttons get the state of the mouse buttons pygame.mouse.get_pos - get the mouse cursor position get the mouse c

  • C#实现可捕获几乎所有键盘鼠标事件的钩子类完整实例

    本文实例讲述了C#实现可捕获几乎所有键盘鼠标事件的钩子类.分享给大家供大家参考,具体如下: using System; using System.Text; using System.Runtime.InteropServices; using System.Reflection; using System.Windows.Forms; namespace MouseKeyboardLibrary { /// <summary> /// Abstract base class for Mous

随机推荐