ActionScript3.0教程

2017-04-22 AS3.0高级教程

  ActionScript3.,我们要是会使用它,它能够帮助我们做什么呢?下面是阳光网小编给大家整理的ActionScript3.0实用教程,供大家参阅!

  ActionScript3.0实用教程:使用显示对象

  6.1 显示对象属性

  属性表现为对象看得见或看不见的特性。

  DisplayObject类的属性

  alpha 指示对象的alpha透明度值

  blendMode BlendMode类中的一个值,用于指定要使用的混合模式

  filters 包含当前与显示对象关联的每个滤镜对象的索引数组

  mask 调用显示对象被指定的mask对象遮罩

  mouseX 指示鼠标对象的x坐标,以像素为单位

  mouseY 指示鼠标对象的y坐标,以像素为单位

  name 指示DisplayObject的实例名称

  parent 指示包含此显示对象的DispalyObjectContainer对象

  root 对于加载的SWF文件中的显示对象,root属性是此SWF文件所表示的显示列表树结构部分中的顶级显示对象

  rotation 指示DisplayObject实例距其原始方向的旋转程度,以度为单位

  scaleX 指示从对象注册点开始应用的对象的水平缩放比例

  scaleY 指示从对象注册点开始应用的对象的垂直缩放比例

  stage 显示对象的舞台

  visible 显示对象是否可见

  width 指示显示对象的宽度,以像素为单位

  x 指示DisplayObject实例相对于父级DisplayObjectContainer本地坐标的x坐标

  y 指示DisplayObject实例相对于父级DisplayObjectContainer本地坐标的y坐标

  6.1.1 动态定位显示对象

  显示对象属性的一个强大功能是可以从一个显示对象上取得属性来影响另一个显示对象的属性。

  6.1.2 位置和注册点

  x,y,scaleX,scaleY,rotation属性都依靠显示对象的注册点。注册点是显示对象的(0,0)坐标。对象的注册点在哪,它的x,y左边就在哪。注册点也是对象缩放和旋转的原点。

  6.1.3 使用显示对象容器来定位一组显示对象

  使用显示对象容器来分组并定位一组对象是一个完美的方法。例如你可以添加所有的菜单按钮到一个显示对象容器的显示列表中。

  6.2 管理对象深度

  在flash平台应用程序中,所有的显示对象在显示列表中都位于他们各自的深度上。如有两个对象彼此重叠,深度高的显示对象将会在深度低的对象上边。

  在一个应用程序中,当需要使得一个显示对象在另一个显示对象的下边或者上边时,也许会弄乱对象的深度。这时就需要深度管理了。

  深度管理可以有很多种方式。除了在添加一个显示对象到显示列表时自动分配,也可以使用DisplayObjectContainer类的方法来整理和改变对象的深度。在应用程序开发方案里都是需要管理显示对象的

  DisplayObjectContainer类的深度管理方法

  addChildAt() 将一个DisplayObject实例添加到显示列表的指定深度索引

  getChildAt() 返回位于指定索引处的子显示对象实例

  getChildIndex()返回指定的DisplayObject实例的索引位置

  removeChildAt()删除指定索引位置的DisplayObject实例

  setChildIndex() 更改指定的DisplayObject实例的索引位置

  swapChildren() 交换两个指定的DisplayObject实例的索引位置

  swapChildrenAt() 通过指定索引位置交换两个DisplayObject实例

  6.3 从显示列表中移除显示对象

  从显示列表中删除显示对象是管理flash应用程序的很重要的一部分。

  无论是创作时还是运行时添加的显示对象,都可以通过调用DisplayObjectContainer类的removeChild()方法,并指定对象的实例名删除显示对象实例。

  与从显示列表中删除对象一样重要的是删除已经被移除的对象运行的代码和事件监听器。

  ActionScript3.0实用教程:通信和事件

  在as中,通信是完全由事件驱动的。as3.0的事件模型允许完全封装类对象。封装的意思是类对象仅处理他们自己的内部,与其他类对象的功能没有联系。他们做自己的工作并且保持低调。对象需要与外部世界通信时,他们就分发事件。注册在对象上的监听器等待分发的事件,并作出相应的动作。

  在许多情况下都会触发事件,这取决于类本身。通过标准的as API处理他们。

  7.1 as3.0 事件模型

  as3.0事件模型使对象之间的通信简单、一致。

  7.1.1 事件过程细节

  处理事件的3个过程如下

  事件监听器声明 声明注册函数来监听事件

  事件分发 当事件在类中发生时,它就会被这个对象分发出去。事件对象被事件传递。事件对象包含事件的相关信息。

  事件监听器或处理器 事件监听器或处理器是拥有一系列代码的函数,响应函数可以“听到”的事件。

  事件监听器和事件处理器是相同的意思——是一个监听事件也是处理事件的函数。

  7.1.2 事件分发

  所有的类都用从EventDispatcher类继承的dispatchEvent()方法分发事件,或者实现IEventDispatcher接口。当类中的某件事情发生并且想要分发到应用程序的其他部分让他们知道这件事情发生了时,就调用dispatchEvent()方法。事件相关的信息和其他需要的参数通过时间对象发送给监听器。事件的分发者是事件过程的开始。

  Event类是所有事件对象的基类。当一个事件被EventDispatcher的方法触发(例如addEventListener),事件对象都被作为参数传递到监听器函数中。事件对象包含被分发事件的相关数据。Event类有标准的属性,方法和被大多数类使用的常量。

  Event类的属性

  bubbles 布尔值,指示事件是否为冒泡事件

  cancelable 指示是否可以阻止与事件相关联的行为

  currentTarget 当前正在使用某个事件监听器处理事件对象的对象

  phase 事件流中的当前阶段

  target 事件目标

  type 分发事件类型

  7.1.3 注册事件监听器

  事件监听器向对象注册来监听对象分发的事件。当一个对象的事件发生时会一直分发事件,无论是否有监听器为监听该事件注册了事件监听。

  监听器只需要“连接”到对象来“听”他们的事件。

  监听从对象分发的特定事件是应用程序很重要的功能,例如用户单击按钮(分发mouseDown事件)

  每个注册到对象的监听器都在监听一个明确的事件类型。被分发的事件类型表现为一个存储在静态类常量中的字符串。常量一般情况下是只读的、不会改变的并且大写的。静态属性可以被类名直接引用。事件类也存储事件常量。例如MouseEvent类型可以是mouseDown或MouseEvent.MOUSE_DOWN类型。我们使用事件常量(例如MOUSE_DOWN)而不是字符串(例如mouseDown),是由于as编辑器通常有代码自

  动完成功能,这样可以避免由于手动输出事件名出现的拼写错误。

  给一个对象添加事件监听器的语法是以对象名开始,后面接着addEventListener()方法:objectName.addEventListener();

  必须给addEventListener()传递两个参数:监听的事件类型 和 作为事件监听器监听事件的函数

  7.1.4 事件监听器

  事件监听器(事件处理器)是注册到一个对象上,”监听“一个特定事件类型的函数或方法。

  function eventHandler(evt:Event):void{}

  通过函数处理函数的参数可以访问事件的属性。

  使用字符串mouseDown而不使用事件常量MOUSE_DOWN是合法的,但是不推荐。

  7.2 使用事件监听器

  在as中事件监听器是所有通信的管道。分发某个事件,监听器”听到“它并处理这个事件。”处理这个事件“,意思是监听器函数收到了作为参数传递来的事件对象,并执行了函数中包含的代码。

  7.2.1 事件类

  flash.events.Event类处理大多数在as API中的一般的事件。例如在运行时每次往舞台上添加显示对象都分发addedToStage事件。

  var s:Sprite = new Sprite();

  s.addEventListener(Event.ADDED_TO_STAGE, spriteAddedHandler);

  function spriteAddedHandler(e:Event):void {

  trace("helo")

  }

  function spriteRemovedHandler(e:Event):void {

  trace("lhls")

  }

  addChild(s);

  removeChild(s)

  一个对象可以添加多个事件监听器(例如,同一个对象给不同监听器分发不同的事件类型)。多个对象也能与同一个事件监听器有关(例如,一个一般的事件监听器可以识别分发了那个事件类型,以及

  分发的对象来源)

  7.2.2 使用事件对象

  通过调用传递到事件监听器中的参数,可以访问事件对象。

  一个很好的习惯是:在一个事件处理函数中处理多个事件类型而不是为每一个事件类型都单独创建一个处理函数。

  7.2.3 MouseEvent类

  一些类对象需要分发额外的、Event类本身无法满足的对象,这样就需要一个”增强型“的事件对象。这些”增强型“的事件对象继承自Event类,且包括更多的事件类型和属性。

  MouseEvent:鼠标事件

  鼠标单击事件:适用于影片剪辑、按钮、舞台。(PS:Button.buttonMode=true;鼠标变成手型)

  鼠标移入事件:MOUSE_OVER

  鼠标移出事件:MOUSE_OUT

  鼠标双击事件:DOUBLE_CLICK(PS:使用双击事件还要加上一句:Button.doubleClickEnabled=true,表示是否接收双击事件)

  鼠标滚轮事件:MOUSE_WHEEL(鼠标要移动到对象上,才起作用)

  7.2.4 在一个事件处理器中检查多个事件类型

  任何有经验的程序员都有一个共同的习惯:就是尽可能写最小的代码。在事件处理器中可以很好地简化代码,通过判断事件对象的type属性可以决定做出相应的动作。

  使用if条件语句在一个事件处理器中匹配MouseEvent类型。

  7.2.5 KyeboardEvent类

  为了在应用程序的全局范围内监听键盘事件,可以在舞台上注册监听器:stage.addEventListener()监听器之后就可以监听到KEY_DOWN和KEY_UP事件并调用它们相应的事件处理器了。

  为了检测并响应键盘的单击事件,必须声明KeyboardEvent的事件监听器。组合键(例如ctrl alt shift)和其他任何键都可以被检测。

  KeyboardEvent属性

  charCode 包含按下或释放的键的字符代码值

  keyCode 按下或释放的键的键控代码值

  keyLocation 指示键在键盘上的位置

  ctrlKey 指示ctrl键是否出于活动状态(true),还是非活动状态(false)

  altKey 指示alt键是否出于活动状态(true),还是非活动状态(false)

  shiftKey 指示shift是否出于活动状态(true),还是非活动状态(false)

  在as中,识别键盘是通过检测当前键盘上单击的keyCode值并与标准的键值做匹配来完成。

  直接在flash IDE里也许不会允许在播放器中注册所有键盘事件,这是因为flash IDE本身也许捕获了他们作为键盘快捷键,进而阻碍了flash player

  KeyboardEvent:键盘事件

  键盘按下事件:KEY_DOWN

  键盘松开事件:KEY_UP

  键盘按键的值:KeyboardEvent.keyCode,可以通过此属性获取按键的值

  按键控制:键盘四个方向键对应的数值:←:37,↑:38,→:39,↓:40,空格:32

  7.2.6 删除事件监听器

  与给对象添加事件监听器同样重要的是从舞台上删除事件监听器,或不再需要监听这个对象的事件时将其删除。既是一个对象已经不再需要,如果不删除它的事件监听器,他们仍然会消耗资源。

  删除事件监听器的第一步是调用分发者对象,第二步是调用removeEventListener()方法,最后作为参数指定事件类型和事件监听器:objectName.removeEventListener(EventClass.EVENT_TYPE,eventHandler);

  7.3 事件流

  在as3.0中,事件流主要用于MouseEvent和KeyboardEvent对象。例如,从一个按钮分发的MouseEvent事件,其实并不只是从按钮本身分发的,而是从按钮所在的父显示对象容器分发的。

  如果你有一个MovieClip容器包含了一系列按钮的时候,这是很有用的'。只要给容器本身注册一个事件监听器。你可以通过在过程中引用MouseEvent对象的target和currentTarget属性证实是否MovieClip容器中的按钮被单击了。

  事件流发生在3个阶段。

  捕获阶段:事件从舞台开始并按照他的路线通过所有的显示对象直到达到事件起源的对象。

  目标阶段:事件从目标对象开始分发。

  冒泡阶段:当事件对象被创建时如果冒泡事件被设置的话。事件过程冒泡返回通过所有的父显示对象容器直到再次到达舞台。

  捕获阶段和冒泡阶段的不同反映了你是否想要事件在捕获阶段走下跌的路线或在目标阶段后走回升的路线。如果你想要使用捕获阶段,在事件处理函数中的事件对象之后再添加useCapture参数为true:function evetnHandler(evt:EventObject,useCapture=true)

  默认情况下,useCapture是被设置为false的,并且事件只在目标和冒泡阶段被处理。

  想要使用事件流,用事件对象的target和currentTarget属性。MovieClip(event.target)/MovieClip(event.currentTarget)

  currentTarget属性永远是指向事件监听器注册的对象。target属性是在事件流中的当前目标。

  例如,名为button1的按钮存在于名为buttonContainer的影片剪辑的显示列表中,名为clickHandler的MOUSE_DOWN事件监听器函数注册在buttonContainer上,如果鼠标点在button1的上边,buttonContainer被单击时,MouseEventd对象的currentTarget属性将返回buttonContainer,target属性将会返回button1

  PS:在某些需要在事件到达对象前拦截的情况下,或者代码需要在冒泡阶段执行的一些复杂组件交互案例中,使用冒泡与捕获阶段是很有用的。尽管事件流很有用,但在某些你觉得有可能出错的鼠标交互里可以不必使用它。

  7.4 Evetn类的子类

  Event类的子类

  ColorPickerEvent 与ColorPciker相关的事件对象

  FocusEvent 当一个对象的焦点转变到另外一个对象时使用的事件对象

  KeyboardEvent 通过键盘输入的事件对象

  MetadataEvent 当接收到FLV视频文件的元数据信息包时使用的事件对象

  MotionEvent 由fl.motion.Animator类分发的事件对象

  MouseEvent 当鼠标事件发生时分发的事件对象

  NetStatusEvent 当NetConnection NetStream SharedObject类的状态改变时分发的事件对象

  ProgressEvent 当一个加载对象开始加载之后有规律地分发的事件对象

  SoundEvent 当Sound对象的设置改变时分发的事件对象

  TextEvent 当与TextField互动或者改变时分发的事件对象

  TimerEvent 当Timer对象的每个时间间隔完成时分发的事件对象

  TweenEvent 由fl.transitions.Tween类分发的事件对象

  VideoEvent 当视频状态改变时分发的事件对象

  ActionScript3.0实用教程:控制时间轴

  8.1 控制时间轴

  用于控制时间轴的MovieClip方法

  gotoAndPlay() 跳转至指定的帧然后开始播放时间轴

  gotoAndStop() 跳转至指定的帧然后停止

  nextFrame() 跳转至下一帧

  prevFrame() 跳转至上一帧

  play() 从当前帧开始播放

  stop() 在当前帧停止播放

  【停止影片:1.stop(),2.事件监听】

  使用帧标签

  帧标签只可以指定给关键帧。帧标签不可以含有空格,也不可以以数字开头。

  影片剪辑按钮(仍是影片剪辑)与按钮元相似,但却是创建有以下特征按钮的基础:

  完全动画的

  可充用的

  包含其他显示对象

  按钮元件本身除了基本的鼠标事件是没有太多其他功能的。一个影片剪辑的按钮有完整的时间轴并在其时间轴中完全支持as驱动,这样可以制作高级交互和特效。

  PS:在第某帧插入一帧,这样时间轴就得到了继承。如果时间轴上没有什么改变,那关键帧就不是必需的。应该只有在时间轴引入改变时才使用关键帧。因为即使他们没有任何内容也会比普通帧占去更多资源。如果希望在时间轴上创建空隙,那么你应该使用普通帧。

  给影片剪辑的时间轴中嵌入as代码是给影片剪辑封装功能。这样可以重用这个影片剪辑而不用写额外的代码。

  8.2 使用目标路径导航时间轴

  在应用程序中给你的显示对象和嵌套显示对象和它们的层级画一个线框图是个很好的主意。这样会给你一个怎样用as找到显示对象并且告诉它们去做什么的清晰路线。

  绝对目标路径和相对目标路径

  如果想要从任何其他显示对象时间轴中调用舞台,你可以有两种方式调用它:使用一个绝对路径或相对路径。

  从时间轴经过绝对路径调用舞台需要调用root时间轴(舞台本身)使用root标识符。想要声明root作为一个显示对象并且从任何其他显示对象内部的时间轴调用root,代码如下:var myRoot:MovieClip=root as MovieClip;

  myRoot.doSomething();

  基本上将root返回的对象作为显示对象,是没有任何影片剪辑属性的,所以我们需要将它重新转型为有用的影片剪辑。

  stage或root也是某一显示对象的时间轴,要从该显示对象的时间轴通过相对路径调用舞台,代码如下:var myParent:MovieClip=this.parent as MovieClip;

  myParent.doSomething();

  或者 MovieClip(thi.parent).doSomething();

  无论哪种方式,要通过相对路径调用显示对象的父级,都需要告诉flash,该显示对象的父级是一个MovieClip对象。

  8.3 在运行时定义帧频

  在运行时设置帧频是as3.0的新特性。可以用它来自由控制程序的速率。缓慢的帧频性能表现出色,但是在平滑的动画中会显得很笨重。而快速的帧频拥有平滑的动画和视觉效果,同时也导致了性能下降,进而导致了舞台上的视觉项渲染速度降低。

  使用stage类的frameRate属性,改变帧频以改变动画的速度。

  场景跳转:打开场景面板:shift+F2

  gotoAndStop(2,"次场景");

  gotoAndPlay(2,"次场景");

  prevScene():前一场景

  nextScene():后一场景

  获取播放头位置:currentFrame

  获取总帧数:totalFrames,可用于场景与影片剪辑。

  回放:使用ENTER_FRAME事件

  if(this.currentFrame==1){this.gotoAndStop(this.totalFrames)}

  else{this.preFrame();}

  加载库中的元件:var 元件名:元件=new 元件();

  addChild(元件名);

  添加多个元件:stage.stageWidth/10*i

  f_mc.y=(f_mc.y+f_mc.height)*i

  Math.random();

  拖动对象:var fw=new Rectangle(0,10,0,0)

  MOUSE_DOWN startDrag(false,fw)

  MOUSE_UP stopDrag()

  MouseEvent.ROLL_OUT 当鼠标移出对象时

  

【ActionScript3.0实用教程】相关文章:

1.ActionScript3.0自学教程

2.Flash ActionScript3.0简介

3.ActionScript3.0基础教程

4.ActionScript3.0有什么优点

5.ActionScript3.0新增功能介绍

6.ActionScript3.0开发流程详解

7.Flash ActionScript3.0高级教程全集

8.★Flash ActionScript3.0运算符

上一篇:ActionScript3.0基础教程 下一篇:as3.0高级动画教程