AS3的事件模型

2024-06-01 14:08
文章标签 模型 事件 as3

本文主要是介绍AS3的事件模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在flash中只要发生事件,Flash Player 就会调度事件对象。如果事件目标不在显示列表中,则 Flash Player 将事件对象直接调度到事件目标。例如,Flash Player 将 progress 事件对象直接调度到 URLStream 对象。但是,如果事件目标在显示列表中,则 Flash Player 将事件对象调度到显示列表,事件对象将在显示列表中穿行,直到到达事件目标。
  "事件流"说明事件对象如何在显示列表中穿行。显示列表以一种可以描述为树的层次结构形式进行组织。位于显示列表层次结构顶部的是舞台,它是一种特殊的显示对象容器,用作显示列表的根。舞台由flash.display.Stage类表示,且只能通过显示对象访问。每个显示对象都有一个名为stage的属性,该属性表示应用 程序 的舞台。
  当Flash Player调度事件对象时,该事件对象进行一次从舞台到"目标节点"的往返行程。DOM事件规范将目标节点定义为代表事件目标的节点。也就是说,目标节点是发生了事件的显示列表对象。例如,如果用户单击名为child1的显示列表对象,Flash Player将使用child1作为目标节点来调度事件对象。
  从概念上来说,事件流分为三部分。第一部分称为 捕获阶段 ,该阶段包括从舞台到目标节点的父节点范围内的所有节点。第二部分称为 目标阶段 ,该阶段仅包括目标节点。第三部分称为 冒泡阶段 。冒泡阶段包括从目标节点的父节点返回到舞台的行程中遇到的节点。
  如果您将显示列表想像为一个垂直的层次结构,其中舞台位于顶层(如下图显示),那么这些阶段的名称就更容易理解了:
  

   
  如果用户单击Child1,Flash Player将向事件流调度一个事件对象。如下面的图像所示,对象的行程从Stage开始,向下移动到Parent,然后移动到Child1,再"冒泡"返回到Stage:在行程中重新经过Parent,再返回到Stage。
  

   
  在该示例中,捕获阶段在首次向下行程中包括Stage 和 Parent。目标阶段包括在Child1 花费的时间。冒泡阶段包括在向上返回到根节点的行程中遇到的Parent 和 Stage。
  事件流使现在的事件处理系统比  ActionScript 程序员以前使用的事件处理系统功能更为强大。早期版本的 ActionScript 中没有事件流,这意味着事件侦听器只能添加到生成事件的对象。在 ActionScript 3.0中,您不但可以将事件侦听器添加到目标节点,还可以将它们添加到事件流中的任何节点。
  当用户界面组件包含多个对象时,沿事件流添加事件侦听器的功能十分有用。例如,按钮对象通常包含一个用作按钮标签的文本对象。如果无法将侦听器添加 到事件流,您将必须将侦听器添加到按钮对象和文本对象,以确保您收到有关在按钮上任何位置发生的单击事件的通知。而事件流的存在则使您可以将一个事件侦听器放在按钮对象上,以处理文本对象上发生的单击事件或按钮对象上未被文本对象遮住的区域上发生的单击事件。
  不过,并非每个事件对象都参与事件流的所有三个阶段。某些类型的事件(例如enterFrame 和 init 类型的事件)会直接调度到目标节点,并不参与捕获阶段和冒泡阶段。其它事件可能以不在显示列表中的对象为目标,例如调度到 Socket类的实例的事件。这些事件对象也将直接流至目标对象,而不参与捕获和冒泡阶段。
   
  [color=ize:16px] 事件实例
  [color=ize:16px]Main类:package{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import RectContainer;

public class Main extends Sprite{
  
  
  public function Main(){
   var outter:Sprite = new RectContainer(10, 10, 200, 200);
   var middle:Sprite = new RectContainer(30, 30, 150, 150);
   var inner:Sprite = new RectContainer(50, 50, 100, 100);
   
   outter.name = "外部容器";
   middle.name = "中间容器";
      inner.name = "内层容器";
   
   addChild(outter);
   outter.addChild(middle);
   middle.addChild(inner);
   
   inner.addEventListener(MouseEvent.CLICK, clickHandler);
   middle.addEventListener(MouseEvent.CLICK, clickHandler);
   outter.addEventListener(MouseEvent.CLICK, clickHandler);
  }
  
  private function clickHandler(evt:MouseEvent):void{
   trace("事件发生目标:\t" + evt.target.name);
   trace("正在侦听事件的当前目标\t" + evt.currentTarget.name);
   trace("事件当前阶段\t"  + evt.eventPhase);
   trace("==========================================");
  }
}
}
  
RectContainer类:package{
import flash.display.Sprite;

public class RectContainer extends Sprite{
  
  
  public function RectContainer(x:Number,y:Number,w:Number,h:Number){
   this.graphics.beginFill(0xFFFFFF * Math.random());
   this.graphics.drawRect(x, y, w, h);
   this.graphics.endFill();
  }
}
}
  
F 点击内部矩形触发事件如下:
  事件发生目标:     内层容器
  正在侦听事件的当前目标 内层容器
  事件当前阶段  2
  ==========================================
  事件发生目标:     内层容器
  正在侦听事件的当前目标 中间容器
  事件当前阶段  3
  ==========================================
  事件发生目标:     内层容器
  正在侦听事件的当前目标 外部容器
  事件当前阶段  3
  ==========================================
   F 点击中部矩形触发事件如下:
  事件发生目标:     中间容器
  正在侦听事件的当前目标 中间容器
  事件当前阶段  2
  ==========================================
  事件发生目标:     中间容器
  正在侦听事件的当前目标 外部容器
  事件当前阶段  3
  ==========================================
   F 点击外部矩形触发事件如下:
  事件发生目标:     外部容器
  正在侦听事件的当前目标 外部容器
  事件当前阶段  2

  ==========================================

转载注明:http://www.shengshiyouxi.com

这篇关于AS3的事件模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021224

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行