精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网页软件>FLASH教程>正文

Flash AS2 事件处理机制


来源:不详 时间:07-07-13 点击: 点击这里收藏本文
教程中你将学习下面的内容:

       1.事件处理机制.
       2.创建类库.
       3.使用 回调函数.
              3.1.示例: CFEventClass 类(简单的示例).
              3.2.示例: CFTimer 类(定时器).
       4.使用 addListener 方法(AsBroadcaster / BroadcasterMX 类).
              4.1.示例: AsBEventClass 类(简单的示例).
              4.2.示例: AsBTimer 类(定时器).
       5.使用 addEventListener 方法(EventDispatcher 类).
              5.1.示例: EDEventClass 类(简单的示例).
              5.2.示例: EDTimer 类(定时器).
       6.建立强大的事件处理机制.
              6.1.创建 CFDelegate 类(修改 Delegate 类).
              6.2.创建 CFEventDispatcher 类(修改 EventDispatcher 类).
              6.3.创建 Event 类(事件基类,继承 Object 类).
              6.4.创建 IOErrorEvent 类(错误事件类,继承 Event 类).
              6.5.创建 HTTPStatusEvent 类(http状态事件类,继承 Event 类).
              6.6.示例: EventClass 类(简单的示例).
              6.7.示例: Timer 类(定时器,功能跟 AS3 中的 Timer 类一样).
       7.小结.

源文件(LRC 和 CFSound 类也在这):Flash Class Library.rar

[1.事件处理机制]

AS2 的事件处理机制并不完美.形态多样.不易于管理.在这里可以解决此问题的一半.本文会先了解和使用
AS2 中基本的事件处理机制.然后建立强大的事件处理机制.来方便管理自己的程序.下面讲解.

形态多样的事件处理机制(后面会详细的讲解):
1.回调函数.(如 onLoad, onHTTPStatus 等)
2.使用 addListener 方法. (如 onLoadStart, onLoadInit 等)
3.使用 addEventListener 方法. (如 click, change 等)

它们的作用域和形态(代码):
作用域是指标识符(如常量、数据类型、变量或例程)在程序内可被引用的范围.
1.this 指向触发此事件的对象

object.onLoad = function()
{
    trace(this); //输出: object
}

2.this 指向侦听器对象

var listenerObject:Object = {};
listenerObject.onLoadStart = function()
{
    trace(this); //输出: listenerObject
}
broadcasterObject.addListener(listenerObject);

3.使用侦听器对象:this 指向侦听器对象

var listenerObject:Object = {};
listenerObject.click = function(evt:Object)
{
    trace(this); //输出: listenerObject
}
broadcasterObject.addEventListener("click", listenerObject);

使用函数:this 指向触发此事件的对象

function clickHandler(evt:Object):Void
{
    trace(this); //输出: broadcasterObject
}
broadcasterObject.addEventListener("click", clickHandler);

有时我们需要更改它们的作用域怎么办?
想要改变它们的作用域,需使用 Delegate 类的 create 方法.
此类的全路径: mx.utils.Delegate;
用法: Delegate.create(要运行函数的范围, 函数);
例:
1.this 指向 _level0

import mx.utile.Delegate;
object.onLoad = Delegate.create(this, _onLoad);
function _onLoad():Void
{
    trace(this); //输出: _level0
}

2.this 指向 _level0

import mx.utile.Delegate;
var listenerObject:Object = {};
listenerObject.onLoadStart = Delegate.create(this, loadStart);
function loadStart():Void
{
    trace(this); //输出: _level0
}
broadcasterObject.addListener(listenerObject);

3.
使用侦听器对象:this 指向 _level0

import mx.utile.Delegate;
var listenerObject:Object = {};
listenerObject.click = Delegate.create(this, clickHandler);
function clickHandler(evt:Object)
{
    trace(this); //输出: _level0
}
broadcasterObject.addEventListener("click", listenerObject);

使用函数:this 指向 _level0

function clickHandler(evt:Object):Void
{
    trace(this); //输出: _level0
}
broadcasterObject.addEventListener("click", Delegate.create(this, clickHandler));

事件对象:
它包含两个基本属性:
type:String              事件名.
target:Object       事件源.此属性可以不指定,默认为事件源(调用dispatchEvent方法的对象).
此对象传递给 EventDispatcher 类的 dispatchEvent 方法并作为参数传递到侦听器.
例:

//发送事件.
dispatchEvent({type:"click", target:this});
//事件处理函数.
function clickHandler(evt:Object):Void
{
    trace([evt.type, evt.target]); 
}
//添加事件侦听器.
addEventListener("click", clickHandler);

下一节讲:[2.创建类库]

在开始下面的教程之前.先要创建类库.在硬盘中创建如图结构的文件目录:

Flash AS2 事件处理机制


Classes 目录是用来存放类文档.
Example 目录是用来存放示例文档.
创建好后还需要在 Flash 中添加类路径:
Flash 8: 编辑-->首选参数-->ActionScript-->ActionScript 2.0 设置-->添加(+)-->浏览到 Flash Class Library/Classes 目录.
Flash AS2 事件处理机制

Flash CS3: Edit-->Preferences-->ActionScript-->ActionScript 2.0 Settings-->Add New Path(+)-->Browse To Flash Class Library/Classes 目录.
ActionScript 3.0 也要添加(在后续文章中会用到).
Flash AS2 事件处理机制

下一节讲: [3.使用 回调函数]

[3.使用 回调函数]

回调函数也可以说是匿名函数,先看下面的代码:

var myXML:XML = new XML();
myXML.load("xml.xml");
myXML.onLoad = function(success:Boolean)
{
    trace(success);
}

XML.onLoad 是一个回调函数.将匿名函数与特定的事件关联,以创建回调函数.函数将在特定事件发生后调用回调函数.
在自定义类中怎么做呢?看下面的示例.

9 7 3 1 2 3 4 5 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.