CSDN博客

img 9116

Flash 中的OOP(上)

发表于2004/6/7 9:39:00  837人阅读

分类: Flash RIA

第四部分  Flash 中的OOP

一、Actionscript 2.0概述

在最新的Flash MX 2004中,Macromedia推出了新一代的脚本语言Actionscript 2.0Actionscript2.0 Actionscript1.0的基础上进行了调整,提供了一些与其它编程语言类似的强大编程功能。Actionscript 2.0 提倡可复用、可伸缩、可维护的可靠程序结构。它还通过为用户提供全程的编码辅助和调试信息,从而缩短开发时间。Actionscript2.0 符合现有标准,且基于 ECMAScript 4 建议。

Action Script 2.0的出现,并不意味着原来的Action Script 1.0被淘汰,因为Action Script 2.0只是给开发人员一个更严谨的编程语言,方便开发,方便编译时的调试,用Actionscript2.0写的Flash,也可以被Flash Player 6支持,因为Actionscript1.0Actionscript2.0都被编译为同一类字节码(Byte-code)。Actionscript2.0除了编程语法、概念有些差别外,它还必须定义在*.as的外部文件中,且仅被专业版支持。传统的程序员可能会更喜欢用Actionscript 2.0

在通常情况下,Flash中的脚本可以有两种:帧脚本和事件脚本。帧脚本位于关键帧中,当播放到脚本所在帧时才被执行。事件脚本需要有事件触发才可以执行,如鼠标事件,键盘事件,数据下载完成的事件等。脚本的分布非常分散,难于管理,开发大型的应用几乎是不太可能。由于Actionscript2.0的类需要在外部文件定义,而且Flash MX 2004 Professional提供了有效的编辑工具和管理工具,使得代码管理和软件开发变的更加方便和高效。

Flash中使用脚本,其原因是显而易见的。脚本可以对数据进行处理,更重要的是实现对时间轴上对象的控制,从而与用户进行交互(interaction),这也是RIA的基本特征之一。而在Flash 中使用类进一步优化了代码组织,可以对*.as文件中的代码进行集中管理。同时也使整个软件呈现一种继承结构,在软件组成上更加模块化。

Actionscript 2.0使用了Unicode字符集,这样可以在同一个Flash文档中使用不同国家的语言。当然也可以指定所需要的字符集,开发者可以选择UTF-8编码或者使用默认编码。UTF-88比特的Unicode编码,默认设置则是的操作系统所使用的字符编码。另外,Actionscript2.0是区分大小写的,大写和小写的标识符有着不同的意义。

 

二、数据类型

数据类型描写了变量所存储的值的类型。在Actionscript 2.0中有两种数据类型:简单类型(primitive)和引用类型(reference)。简单类型包括StringNumberBoolean,它们保存了实际的数据。引用类型包括MovieClipObject类型。它们只是对实际数据的引用。另外还有两种特殊的类型nullundefined类型。

1String 数据类型:在String类型是一种简单数据类型。String数据类型除支持普通的转意外,还支持8 进制转义、16 进制转义和双字节(16位) Unicode转义。String类提供字符串处理方法,对字符串进行处理。当然它所提供的方法较少,而且功能比较单一,远远不及javaSting类。

2Number 数据类型:Number 数据类型是双精度的浮点数。直接使用操作符,实现对Number类型的数据的简单操作,还可以使用MathNumber类的方法实现更为复杂的计算。Number类仅提供了两个方法:Number.toString()Number.valueOf()。其复杂的数值运算还要依赖于Math类。

3Boolean 数据类型:Boolean对象是一个逻辑值,truefalseActionscript在合适的情况下把他们转换为10。它常常伴随逻辑操作符一起使用,来控制程序的流程。

4Object 数据类型:每一个Object 对象是属性的集合,每一个属性都是一组名值对,属性的值可以是Flash中的任何数据类型。指定对象或属性,需要使用点(.)操作符。例如Building是一个对象,而对象Floor又是Building的一个属性,Room又是Floor的属性,这样就有了嵌套的组织结构。如果要访问Room属性,就可以用如下语法:Building.Floor.Room=”12-318”; 对于开发者来说,Object类型最主要的作用是用来组织Flash应用中的信息。创建自定义的对象把各种信息组织成不同的模块,简化脚本,提高代码的重用率。当然在OOP中更多的会使用类来组织各种信息,因为类具有更简单的定义和使用方法。后面将会讨论Flash Actionscript 中的类类型。

5MovieClip 数据类型:电影剪辑(MovieClip)是在Flash中播放动画的对象,Movieclip数据类型是唯一使用了图形元素的数据类型,也是Flash中较为核心的一个类型。电影剪辑对象可以使用 Movieclip类中所提供的方法来实现一定的控制。

6Null数据类型:Null 数据类型只有一个值,null。这个值的意思是“没有值”。Null数据类型可以在很多的场合使用,例如:

·检查一个对象是否已经接收到数据;

·检查一个对象是否包含了一个值;

·检查函数是否有了返回值;

·检查函数的参数是否为省略值;

7Undefined数据类型:Undefined数据类型只有一个值,undefined。未被赋值的变量指定使用该值。

 

Flash中,不需要去声明所定义的元素是何种类型的数据,当在为变量赋值时,Flash 自动指定它的数据类型,这种现象称为自动数据类型(Automatic data typing)。与之对应的是严格数据类型(Strict data typing)。在Actionscript 2.0中允许在变量定义时,显式地声明变量类型,这就被称为严格数据类型。由于错误的数据类型操作会导致编译器错误,严格数据类型可以阻止一些错误的赋值操作。由于在使用严格数据类型的定义时需要使用var关键字,所以对于用_global修饰的全局变量无法使用严格的数据类型定义。严格数据类型即可以定义Flash内置类的数据类型,也可以定义用户自己创建的数据类型。严格的数据类型还涉及到编译器编译的问题,如果使用严格数据类型来声明或定义变量,那么在该文档的发布选项的脚本设置就必须为Actionscript 2.0。变量是信息的存储容器,定义变量时需要初始化,这个操作建议在第一帧中进行。

对象的生存期和作用域在时间轴上被定义。变量的生存期在一定程度上也依赖于时间轴,但是变量的作用域和生存期在Flash的运行状态中将更加细微化。变量的生存期是指在哪个区域变量可以被访问和使用。Actionscript 2.0 中定义了三种变量生存期:本地变量(Local Variables)仅存在于定义它的函数体的内部;时间轴变量(Timeline Varabbles)可以被在该时间轴上的任何脚本所访问;全局变量(Global Variables)以及函数可以被当前文档任何时间轴的任何脚本访问。在Flash Actionscript 中函数(Function)被视为类,所以它也有作用域和生存期。

·本地变量(Local Variables):定义本地变量时,在函数体内使用var声明。本地变量在一个语句块内有效,在语句块结束时变量的生存期也就结束。注意,如果是本地变量就一定要使用var声明,否则系统将其视为时间轴变量。在函数中使用本地变量是一个非常好的习惯,这样可以使函数更加独立运行。

·时间轴变量(Timeline Variables):时间轴变量可在定义它的时间轴上的任何脚本中使用。定义和初始化时间轴变量可以在时间轴的任何帧中进行,变量在使用之前一定要进行初始化操作,否则变量将不可用。需要注意的是,前面提到过的时间轴刷新并不刷新时间轴上的变量,它仅仅只是刷新时间轴在时间轴深度区域的可视对象。

·全局变量(Global Variables):全局变量可以被任何时间轴访问,并且在整个文档有效。使用全局变量时需要_global标识符声明,而且不需要使用var 如果本地变量与全局变量同名,那么在该本地变量的生存期内无法访问这个全局变量,系统将优先访问本地变量;同样如果本地变量与时间轴变量同名,那么在该本地变量的生存期内将无法访问这个时间轴变量,系统将优先访问本地变量。

 

三、函数(Function

函数(Function)是一个语句块,实现一定的功能。如果一个函数是属于一个对象,那么这个函数就叫做方法(Method),如果函数不属于任何对象,那么就叫做顶级函数(top-level function),在Action面板可以找到这些函数的列表。事实上,在Flash中函数是一个对象,而且Function作为Flash Actionscript的内置类存在。Function类包含两个方法Function.apply()Function.call()以及一个Function.prototype属性。定义一个函数,事实上是定义了一个Function类型的对象,其函数名是一个引用变量。所以函数可以像变量一样进行赋值操作。例如在第一帧中定义如下代码:

var F:Function=new Function();        //声明并创建一个函数对象

F=function(a,b):Number  //把一个返回值为Number型的函数赋值给变量F

{

       return (a+b);

}

 

trace(F(3,8))  //函数调用

而普通的函数定义方法是:

function F (a,b):Number       //定义一个返回值是Number的函数

{

       return (a+b);

}

trace(F(3,8))        //函数调用

因为函数是对象,所以可以像操作变量一样操作函数,只要把函数体赋给一个变量就可以了。变量存在全局变量,所以函数也存在全局函数。使用_global关键字可以把函数定义为全局函数。在任何时间轴调用该函数时不必使用目标路径而直接调用。全局函数可以如下定义:

_global.myFunction = function (x)   //函数的声明和定义

{

   //语句

}

_global.myFunction5; //函数调用

Flash中还包括了一定的内置函数,利用这些函数可以得到系统相关信息、完成特定的任务,例如获取Flash Player 的版本号和获取屏幕分辨率等。每一个函数都有它自己的功能特性,有些函数还要求有参数。如果在调用函数时输入了过多的参数,那么多余的参数将被忽略。如果没有把函数所要求的参数传递过去,那么参数将为undefined的类型,这有可能导致运行时脚本错误。使用return语句可以返回函数的返回值,return 语句阻止了函数继续执行,并返回一个处理结果。这里有几点要注意:

·如果指定了函数的返回值类型,那么就必须返回与其返回值数据类型一致的数据。

·如果指定返回值为任意类型(即void型),那么就可以不包含返回值。

·如果没有指定函数的返回值,那么return语句的使用是可选的,如果没有使用return语句,那么系统自动返回一个空字符串。

使用目标路径可以对函数进行调用,甚至可以调用从外部加载的影片中的函数。如果在函数定义中使用了_global关键字,那么就可以不必使用目标路径而直接调用。但需要注意的是,访问必须在函数创建以后才可以进行,否则函数的调用是无效的。另外,如果重复定义函数,那么新的函数定义将替代原来的函数定义,也就是给函数赋了一个新的值。

 

0 0

相关博文

我的热门文章

img
取 消
img