`
hereson3
  • 浏览: 162989 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

as3学习笔记

阅读更多

1、动态修改影片的帧频 

在AS3中,你可以使用Stage类动态的修改影片的帧频。Stage类 (flash.display.Stage)的stage对象是所有的sprite和MovieClip以及其他在安全沙箱里的所有元件的舞台。 stage对象的帧频可以是0.01到1000之间的任何一个数。要修改帧频,使用下面的代码: 

// 将帧频修改到12帧每秒(FPS) 
stage.frameRate = 12; 
2、类方法的作用域和类绑定在一起 

AS3完全基于类构造。当一个类被创建的时候,类中的参数,变量,方法或任何实例都同时被创建。和AS2不同,AS3中的方法在执行的时候,将使用和类同样的作用域。例如下面的代码: 

package { 
import flash.display.Sprite; 
      
      public class ClassScope extends Sprite { 
          
          public f@unction ClassScope() {        
              traceThis(); // 输出"Class Instance" 
              
              var obj:Object = new Object(); 
              obj.traceThis = traceThis; 
              obj.traceThis(); // 输出"Class Instance" 
              
              traceThis.call(new Sprite()); // 输出"Class Instance" 
          } 
          public override f@unction toString():String { 
              return "Class Instance"; 
          } 
          
          public f@unction traceThis():void { 
              trace(this); 
          } 
      } 
} 
3、图形对象和绘图API 

和 AS1和AS2一样,AS3也提供了绘图API来绘制矢量线段和图形。但是在AS3中,绘图API将独立于显示对象(display objects:MoiveClip,sprites等)而被定义为图形对象(flash.display.Graphics)。图形对象拥有各种绘图方 法用来在内部绘制图形。和以前一样,图形内容将在所有对象的最下层。同时,在AS3中有一些新的方法来帮助你方便的绘制简单的图形。包括: 
圆:drawCircle(x:Number, y:Number, radius:Number):void 
椭圆:drawEllipse(x:Number, y:Number, width:Number, height:Number):void 
矩形:drawRect(x:Number, y:Number, width:Number, height:Number):void 
圆角矩形:drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number, ellipseHeight:Number):void 

代码举例: 

// 绘制一个蓝色的圆角矩形 
var square:Sprite = new Sprite(); 
square.graphics.beginFill(0xFF); 
square.graphics.drawRoundRect(0, 0, 100, 50, 10, 10); 
square.graphics.endFill(); 
addChild(square); 
4、新的变量类型 

AS3中有许多新的数据类型。其中有些类型是以前没有出现的。AS3中的基本数据类型如下: 

简单数据类型: 

Boolean 
int 
null 
Number 
String 
uint 
undefined 
复杂数据类型: 

Object 
Array 
Date 
Error 
f@unction 
RegExp 
XML 
XMLList 
新的数据类型通过类来定义,例如: Matrix (flash.geom.Matrix) Shape (flash.display.Shape)URLRequest (flash.net.URLRequest)等等。 

注意:特殊类型Void在AS3中被改成了全小写:void。“*”可以用来代表所有数据类型。如下: 

var anything:*; 
AS3 中的XML和AS1和AS2中完全不一样。以前的XML类型(对象)被定义为XMLObject。AS3中的XML是标准的E4X-based XML对象。int和uint是number类型的新扩展,int表示整型(没有小数),unit是无符号整型(不能是十进制,不能是负数)。 使用int型比使用Number能稍微的提升运行效率,而uint型只应该使用在必须的地方,比如颜色值。 

5、显示对象 

AS3有一个新的集合:显示对象。这个集合包含了所有可以在舞台上看到或者可以被添加到显示列表中的对象,包括以前的MovieClip,button和textField对象。AS3的显示对象有: 

AVM1Movie 
Bitmap 
Loader 
MorphShape* 
MovieClip 
Shape 
SimpleButton 
Sprite 
StaticText* 
TextField 
Video 
有* 的表示此对象必须在舞台上手动创建,不能直接通过AS创建。AVM1Movie是使用AS1和AS2创建的Movie,AS3创建的Movie需要通过 AVM2来播放。因此用AS1和AS2创建的Movie在AVM2中被作为一个显示对象来播放。但是不能和AS合使用。Bitmaps是位图对象。可以通 过BitmapData对象来指定显示效果,也可以通过位图文件来设定。Loader对象用来加载和显示外部的image和swf影片文件。 MorphShapes是在时间轴上创建的图形。虽然不能通过AS创建,但是可以通过AS来引用和控制。MovieClips人人都会用,Shapes是 从MovieClip中分离出来一个只有graphics对象的图形容器。在shape中可以通过graphics对象使用绘图API绘制各种图形。使用 shape代替MovieClip可以减少内存负担。Sprite是没有时间轴的MovieClip,在AS3使用中,可能会在很多地方使用sprite 代替MovieClip,尤其在创建自定义的显示组件时。StaticText和MorphShapes一样,不能通过AS创建,这是在时间轴上创建的文 本对象。TextField,文本对象。Video对象,播放flash视频。 

6、新的import标识 

AS3中的import标识和AS2中有一些不同。在AS2中,import被用来代理引用类的长名称,在类中并不是必须的。因此在AS2中,如果你不使用import,你也可以使用类的长名称来引用,例如: 
// ActionScript 2 
var myPoint:flash.geom.Point = new flash.geom.Point(0,0); 
在AS3中,import标识是访问类的必须标识。在使用到其他类的时候,也可以使用类的长名称,但是import不能省略掉。例如: 

// ActionScript 3 
import flash.geom.Point; 
var myPoint:flash.geom.Point = new flash.geom.Point(0,0); 
和AS2一样,import中可以使用通配符(*)来导入整个包: 

import flash.geom.*; 

7、类型转换和as操作符 

AS 允许在需要的时候,将对象的类型改成另外一种匹配的类型,这就是类型转换。AS2和AS3都支持通过像“type(object)”这样的方式进行类型转 换。例如,现定义一个数据类型为Object,你可以通过使用类型名称的语法将这个数据转换成另外一种数据类型。如: 

var obj:Object = getMyCustomObject(); 
vay customObj:MyClass = MyClass(obj); 
AS3引入了一种新的操作符“as”来进行类型转换。as操作符代替了类型名称语法来改变对象的数据类型。如: 

var obj:Object = getMyCustomObject(); 
vay customObj:MyClass = obj as MyClass; 
as操作符的工作方式和AS2中的非常类似。如果转换不可能进行,那么转换的返回值是null。 

AS3 依旧支持通过type(object)的方式来转换类型,但是,这种方式和以前有一点细微的不同。以前转换失败是返回null,现在转换失败后将抛出一个 类型错误(TypeError)。当尝试转换两种对立的数据类型的时候就会失败。例如将一个数据类型转换成另外一个不可能通过联合和继承而得到的类型。 

注意:AS上的全局转换方法Class(object)的优先级依旧高于type(object)转换方法。这些方法包括String(),Number(),和Array()等。 

8、唯一的类变量 

(本文非直接翻译,原文如下:) 
In ActionScript 2, variables defined within a class's body were defined in the class's prototype object. This was an efficient means to handle variable definitions but it also meant that complex data types (such as Arrays) had a tendency to be "shared" among instances if not explicitly defined for instances within the class constructor. This is no longer a problem with ActionScript 3. Class variables defined in the class body are now unique to each class instance so this problem no longer occurs. 

在AS2中,复杂数据类型(比如数组),如果在类体之中,方法之外直接初始化,而不在构造器中初始化,会被理解为“共享”的数据,而被所有的实例共享使用(类似于static的效果)。但是在AS3中不存在这个问题。类变量是每个实例独有的,唯一的变量。如下: 

class myClass{ 
      private var list:Array = [1,2,3]; //在AS2中会有一定问题,AS3中就很好 
      public f@unction myClass(){  
         //在AS2中,应该在这里初始化list 
      } 
} 
9、新的MouseMove行为 

mouseMove行为在AS3中有所改变。以前,mouseMove动作是一个全局概念,也就是说不管鼠标在FlashMovie的任何一个地方,只要移动了,就会触发任何一个MovieClip的mouseMove行为。 

在 AS3中,Mouse对象不再用来分派(dispath)鼠标行为。对于mouseMove行为来说,你应该监听一个InteractiveObject 的实例,比如Sprites,MovieClip和Stage。所以,你可能需要使用InteractiveObject来代替Mouse接收监听。 对于每一个InteractiveObject实例,mouseMove行为只在这个对象的所在范围内执行。如果你要使用全局的mouse事件监听,则需 要对stage添加监听。 

因此,在使用mouseMove来拖动一个对象的时候,当你的鼠标离开的脱离对象,对该对象的mouseMove事件就会失效,拖动效果也就同时实效了。这个时候,你可能需要对stage添加move行为来进行监听: 

stage.addEventListener(MouseEvent.MOUSE_MOVE, dragMyObject); 
10、delete关键字和类成员 

delete关键字在Flash中是用来删除定义的变量,但是并不将对象从内存中清除掉(这是垃圾收集器的工作)。它只是将一个变量的引用设置成无效,让内存中的这个对象无法再被引用和使用,也无法再使用for in来枚举。 

事 实上,垃圾处理器(GC)将在特定的时候,自动的从内存中删除那些不再被引用和使用的变量。比如,你创建了两个对象引用A和B,都指向了对对象 ObjectX的引用,如果delete了A,并不会让垃圾收集器把ObjectX从内存中删除,因为B的引用还是指向了这个对象。如果将A和B都 delete,则不再有对ObjectX的引用,ObjectX也将被垃圾收集器回收。例如: 

var a:Object = new Object(); 
var b:Object = a; // b和a引用同一个new Object(); 
delete a; 
trace(b); // 输出[object Object] - 在内存中还是存在 
delete b; 
// GC将回收object 
这 个特性在Flash8和9(AS123)中几乎都是一样的,但是在Flash8中,GC的一些特性得到改善并能更好的工作。(注意,垃圾收集不是即时的) 虽然GC在AS3中并没有什么本质上的改变,但是因为使用了新的虚拟机,delete关键字的行为有所改变。现在,delete关键字只能针对类的动态属 性和非公有成员有效。而在AS1和2中,delete能被用在所有的东西上。 

// ActionScript 2 
class DeleteVarClass { 
      public var myVar:Number; 
      f@unction DeleteVarClass() { 
          myVar = 1; 
          trace(myVar); // 1 
          delete myVar; 
          trace(myVar); // undefined 
      } 
} 
// ActionScript 3 
package { 
      public class DeleteVarClass { 
          public var myVar:Number;   
          public f@unction DeleteVarClass() { 
              myVar = 1; 
              trace(myVar); // 1 
              delete myVar; 
              trace(myVar); // 1 
          } 
      } 
} 
在上面的AS3例子中,因为myVar变量是一个公有成员,所以不能用delete来删除这个变量。尽管在AS3中不能删除类成员,但是如果你想删除一个对象的所有引用,可以通过将变量设置为null来代替delete。如: 

myVar = null; 
如果一个对象的所有引用都是null,GC将自动的从内存中删除这个对象。 

11、Dictionary类 

AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类。Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键。例如: 

var obj:Object = new Object(); 
obj["name"] = 1; // 键是字符串"name" 
obj[1] = 2; // 键是1 (被转换成字符串"1") 
obj[new Object()] = 3; // 键是new Object(),被转传成字符串"[object Object]" 
for (var prop:String in obj) { 
      trace(prop); // 输出:[object Object], 1, name 
      trace(obj[prop]); // 输出:3, 2, 1 
} 
也就是说,无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的对象作为键,都会北转换成字符串"[object Object]"作为键,因此而指向了同一个数据。例如: 

ActionScript Code: 
var a:Object = new Object(); 
var b:Object = new Object(); 
var obj:Object = new Object(); 
obj[a] = 1; // obj["[object Object]"] = 1; 
obj[b] = 2; // obj["[object Object]"] = 2; 
for (var prop:String in obj) { 
      trace(prop); // traces: [object Object] 
      trace(obj[prop]); // traces: 2 
} 
Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。例如: 

import flash.utils.Dictionary; 
var a:Object = new Object(); 
var b:Object = new Object(); 
var dict:Dictionary = new Dictionary(); 
dict[a] = 1; // dict[a] = 1; 
dict[b] = 2; // dict[b] = 2; 
for (var prop:* in dict) { 
      trace(prop); // traces: [object Object], [object Object] 
      trace(dict[prop]); // traces: 1, 2 
} 
虽然在trace的时候,输出的还是[object Object],但是这个结果是对象的toString的结果。在Dictionary对象中,代表的是不同的对象引用。注意,这里的prop的类型是*。这是很重要的,因为dict对象中的键可能是任何数据类型的。 

12、标签申明 

在AS3中引入了标签,新的标签可以和循环体一起使用。例如,现在有两个嵌套的循环体,如果想要在内循环体中break掉外循环,一般使用下面的方法: 

var i:Number; 
var j:Number; 
var exit:Boolean = false; 
for (i=0; i<10; i++) { 
      for (j=0; j<10; j++) { 
          if (i > 3 && j > 3) { 
              exit = true; 
              break; 
          } 
    } 
      if (exit) { 
          break; 
      } 
} 
在引入了新的标签以后,可以使用下面的方法从内循环体中直接break掉外循环体: 

var i:Number; 
var j:Number; 
mainLoop: for (i=0; i<10; i++) { 
      for (j=0; j<10; j++) { 
          if (i > 3 && j > 3) { 
              break mainLoop; 
          } 
      } 
} 
在第一个循环体上设置了mainLoop的标签,因此在循环体内任何地方使用break mainLoop直接中止外循环。

分享到:
评论

相关推荐

    AS3学习笔记flashdevelop平台搭建配置.pdf

    AS3学习笔记FlashDevelop平台搭建配置 AS3学习笔记FlashDevelop平台搭建配置是关于如何搭建和配置FlashDevelop平台的学习笔记。下面是对该笔记中所涉及到的知识点的详细说明: 1. FlashDevelop平台简介 Flash...

    ----AS3学习笔记

    而文件"〔分享〕AS3学习笔记 - RIACHINA 中国RIA开发者论坛 - Powered by Discuz!NT.htm"可能包含了社区论坛上关于AS3学习的经验分享、示例代码或疑难解答等内容,是深入学习AS3的好资源。对于初学者而言,理解AS3的...

    flashas3学习笔记

    根据提供的文件信息,我们可以整理出以下关于Flash AS3...以上是基于提供的学习笔记内容整理的关键知识点,这些知识点对于理解和掌握 AS3 的基本概念和编程技巧非常有帮助。希望对学习 Flash AS3 的初学者有所帮助。

    As3殿堂之路学习笔记

    AS3殿堂之路的学习笔记旨在帮助初学者理解AS3的基础概念,掌握核心语法,以便在开发富媒体内容和游戏时游刃有余。通过深入学习这些知识点,开发者可以构建功能丰富的交互式应用程序,并逐步进阶到更高级的编程实践。

    AS400 学习笔记

    3. **Spooled File操作**: - `WRKSPLF`:管理打印队列和输出,包括查看、打印和重定向Spooled文件。 4. **数据库操作**: - `CRTSAVF` 和 `SAVLIB`:创建保存文件并备份数据库。 - `RSTLIB`:从保存文件中恢复...

    AS4AS学习笔记

    在"AS4AS学习笔记"中,我们可以期待找到关于如何利用AppleScript进行高效自动化操作的详细知识。 AppleScript是Apple公司设计的一种易于学习但功能强大的脚本语言,它的主要目标是让用户无需深入学习复杂的编程概念...

    贝加莱AS学习笔记入门

    贝加莱AS学习笔记入门 贝加莱AS学习笔记入门是指贝加莱自动化解决方案的学习笔记,涵盖了贝加莱产品、POWERLINK、B&R PCC 软件平台等方面的知识点。本笔记旨在帮助学习者快速入门贝加莱AS,了解贝加莱产品的特点、...

    AS400 自学笔记集锦

    AS400 自学笔记集锦 AS400学习笔记(V1.2) 自学使用的400操作命令集锦

    AS400 技术资料及学习笔记(全套)

    AS400 基本学习笔记1 1. CL常用的命令:

    LabVIEW学习笔记 LabVIEW学习笔记

    ### LabVIEW学习笔记知识点梳理 #### 一、调试技巧与数据监测 - **探针工具**: 在调试过程中,可以通过右键菜单中的`probe`和`custom probe`功能来设置探针,用于实时监测数据流。这有助于理解数据如何在各个节点...

    AS3.0_AS3殿堂之路_笔记

    《AS3.0_AS3殿堂之路_笔记》是针对Adobe ActionScript 3.0(简称AS3)深入学习的一份详尽笔记,旨在帮助学习者系统掌握这一强大的编程语言,尤其对于想要在Flash平台上进行交互式内容开发的人员来说,这份笔记具有极...

    云计算学习笔记.doc

    云计算学习笔记 云计算是近年来非常热门的技术领域,它的出现改变了传统的计算模式,带来了许多便捷和优势。下面是关于云计算的学习笔记,涵盖了云计算的概念、演进过程、商业模式等方面的知识点。 云计算的概念 ...

    AS400自学笔记整理

    AS400学习笔记整理 AS400是IBM开发的一种大型机系统,主要用于企业级应用系统的开发和部署。作为AS400初学者,学习AS400的命令和操作是非常重要的,本笔记整理了AS400学习笔记的主要内容,包括命令记录、示例解析、...

    AS3933-学习笔记.pdf

    3. 可编程唤醒模式:支持16位的可编程唤醒模式。 4. 支持加倍唤醒模式:可以通过特定的唤醒模式加倍来提高唤醒的准确性和可靠性。 5. 支持没有模式检测的唤醒:可以在没有任何模式检测的情况下进行唤醒。 6. 唤醒...

    AS3殿堂之路 笔记

    这份笔记详细记录了作者在学习过程中的理解和心得,旨在帮助其他学习者更好地掌握AS3的核心概念、语法特性和实际应用。 AS3是Adobe Flash Platform的主要编程语言,广泛应用于网页游戏开发、交互式多媒体内容以及富...

    PV3d Papervision3d API文档+学习笔记+全景案例

    Papervision3D(PV3D)是一款强大的开源3D图形引擎,专为Adobe Flash平台设计,支持ActionScript 3.0(AS3),是Flash AS3中实现3D效果的重要工具。在本文中,我们将深入探讨PV3D的API文档、学习笔记以及全景案例,...

    思科ccna学习笔记

    思科CCNA学习笔记 思科CCNA学习笔记是网络工程师的必备知识,涵盖了计算机网络的基本概念、OSI与TCP/IP协议框架、IP报文传输过程、传输层功能、TCP与UDP对比等内容。以下是该笔记的详细知识点: 一、OSI与TCP/IP...

Global site tag (gtag.js) - Google Analytics