Actionscript 3.0 鼠标事件

所属分类: 网页制作 / Flash 阅读数: 705
收藏 0 赞 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对象,同样是不可以的。
更多精彩内容其他人还在看

Flex程序开发心得小结

和Flash的开发环境相比,Flex提供的组件库确实很诱人,但由于功能太全面,导致程序的体积大,有时候使用不当,可能会影响程序运行效率。
收藏 0 赞 0 分享

关于FLASH与XML交互应用中的理解

关于XML在FLASH中的应用,以前写过几篇。也收集了几篇来自网络的。不过,都是一些非常简单而常用的。在这里,我把XML的其他相关说明总结一下。有不足之处,希望大家能相互补充。只为了一个共同的目的:共同提高。
收藏 0 赞 0 分享

Flash Event写法

flash下event事件驱动方法
收藏 0 赞 0 分享

AS3自写类整理笔记 ClassLoader类第1/2页

在用flash做项目的时候,把一些元件,通过设置链接类,然后使用这个类,通过getClass方法即可把这个素材拿下来
收藏 0 赞 0 分享

AS3自写类整理笔记:ByteLoader类

该类的主要功能是把swf,jpg,png,gif等文件以字节的形式加载进来 以便于使用Loader.loadBytes方法,重复加载使用素材 如果图片格式为jpg,并且是渐进式格式jpeg,那么该类还可以帮助你边加载边显示
收藏 0 赞 0 分享

AS3自写类整理笔记 Dot类第1/2页

拖拽物体1和物体2,就可以看到效果了 index.base.geom.Dot类讲解 基本功能:记录xy两点
收藏 0 赞 0 分享

AS3 中的package(包)应用实例代码

初学者在学习AS3时会遇到什么样的问题呢?只有从初学的角度来实践,才能知道,package 这个高手们必玩的内容,对初学者来说或许就有一些困惑。
收藏 0 赞 0 分享

swfupload使用代码说明

终于在天哪joyous的帮助下,花了一天的时间,搞明白大部分内容. swfupload(以下简称su)遇到的主要问题就是,版本不同造成的极大差异, 现在的版本已经到2.1beta。我用的是2.02版,天哪用的是1.xx版。
收藏 0 赞 0 分享

Flex中最好的MVC框架Mate框架

个人感觉Mate框架非常适合开发一般运用程序,可以提高开发效率,节约成本,同时也比较好维护。但如果要做游戏或是其它控制更强的程序并不适合。
收藏 0 赞 0 分享

Flex 创建复数行文本内容的List

效果不错的flex多行文本
收藏 0 赞 0 分享
查看更多