Actionscript3从入门到精通
- 格式:doc
- 大小:360.00 KB
- 文档页数:21
ActionScript3 Flash编程无基础入门教程如果你觉得上的很多文章看太深奥,或者你是一个没有任何程序基础想学as,或者你连flash都不会。
那么这篇文章就是你茫茫大海上的明灯,让你找到学习as的方向。
做过Flash动画的Flash爱好者们都知道,要做好一个Flash动画,AS是必不可少的,即使只是很简单的几句代码也能起到整个Flash画龙点睛的作用。
这里我只简单的介绍一下AS的基本常识。
首先我们要了解AS要写在什么地方,什么时候AS会被触发执行。
1、帧:写在关键帧上面的AS,当时间轴上的指针走到这个关键帧的时候,就写在这个帧上面的AS就被触发执行了。
常见的例子有在影片结尾的帧写上stop() 等。
操作方法就是点选关键帧,然后打开AS面板。
2、按钮:不同于帧上面的AS,按钮上面的AS是要有触发条件的。
要把AS写在按钮上,操作方法是点选目标按钮,然后打开AS面板。
举个例子能说的更明白。
假设有一个动画,要让它在播放完同时停止,那么,你要做的就是在这个动画的最后一帧写ASstop();再假设有个按钮,效果是按下按钮后停止播放,那么步骤如下。
做一个按钮,放到主场景,点选按钮,然后打开AS面板。
现在如果也在按钮上写stop();那么,输出的时候就会提示错误。
正确的应该这样写on(release){stop();}这里要比帧的动画多这些代码: on(release){} , 整个代码翻译过来就是:当(松开){停止}红色的代码表示鼠标的触发事件事件之一,这里用的是release 松开,按钮的常用事件:release 松开releaseOutside 在按钮外面松开press 按下rollOver 鼠标进入按钮的感应区rollOut 鼠标离开按钮的感应区现在很明确了:写在按钮上面的AS一定就是这种格式的:on(事件){要执行的代码}3、MC(电影剪辑)如果你看懂了上面的内容,那么写在MC上面的AS和写在按钮上的大同小异。
第一课脚本基础和事件处理基础知识ActionScript3.0语言的特点:1、更详细的报错信息在书写代码过程中,ActionScript3.0会严格检查己声明的变量、参数、函数返回值的数据类型。
能够大大提高报告运行异常报错的信息量和准确度。
2、更合理的语法ActionScript3.0统一了语法格式(如一些属性去掉了开头的下划线)。
相似的语法也统一了写法(如加载外部文件或导航到URL时均会用到URLRquest)。
3、全新的显示结构以前令人头疼的深度问题被全新的显示列表彻底解决,在处理显示对象的顺序时更加灵活和方便,显示对象间以继承关系存在。
4、全新的事件机制所有事件均被纳入事件侦听器中,侦听器在侦听到某一特定事件发生时作出反应(运行预定义的侦听函数)。
新的事件模型非常大,允许鼠标、键盘事件在显示列表的多个对象间传递。
5、文本处理的进化ActionScript3.0提供了更多处理文本的方法。
例如:可以取得区域中特定某一行的文本,或是某行中字母的个数,或者取得某点下的字母。
强大的文本处理能力使得文本的交互性大幅度加强。
6、更多处理声音的方式在ActionScript3.0中,不同声音可以单独控制,也可以放在一起处理。
声音被纳入不同的声道(Channel)中,可以通过SoundChannel 对象进行控制。
同时ActionScript3.0也提供了全局的SoundMixer对象,用于控制所有的声音。
7、访问原始数据的全新方法ActionScript3.0可以在运行中访问原始的二进制数据,在下载、播放声音或是处理位图信息时,能够同时访问不同数据。
8、强化面向对象编程ActionScript3.0引入了密封类和命名空间的概念。
密封类只能拥有在编译时定义的固定的一组属性和方法,不能添加其他属性和方法,这使得编译时的检查更为严格,从而使程序更可靠。
ActionScript3.0的代码位置1、将代码存储在Flash时间轴的帧中在Flash创作环境中,可以向时间轴中的任何帧添加ActionScript 代码。
第一章了解ActionScript3.01、ActionScript3.0的一些新特性:●引入显示列表的概念。
显示列表用于创建、管理显示对象的层次结构,任何Flash应用程序实际上就是显示列表。
在显示列表中,采用新的深度机制来管理显示对象的显示层次,使显示对象的深度管理更加人性化。
●使用新的事件模型。
ActionScript3.0中的事件模型与第2用户界面组件有点类似,是采用观察者模式设计的。
新增了事件流、默认行为等功能,很多在ActionScript2.0中难以实现的功能,使用ActionScript3.0将会非常简单。
●引入了E4X,使得操作XML更加方便、快捷。
在以往版本的ActionScript中,使用XML对象前,需要将其转换为数组或对象,而ActionScript3.0可直接操作XML 对象。
●支持正则表达式。
正则表达式在查找和替换模式方面有很大的优势,以往需要几十行代码实现的功能,使用正则表达式只需几行。
2、一般来说,舞台(Stage)是用来显示Flash元素的平台,而主时间轴(Main Timeline)则用来控制Flash元素的显示,它们在编程中扮演相当重要的角色。
舞台是放置显示对象的最终容器,所有的显示对象都直接或间接地包含在舞台中。
舞台的名字是stage,它是Stage 类的对象。
通过点语法可以读取舞台容器中的非孤立变量值,但由于Flash为这些变量规定了只读属性,所以暂时无法通过类似“stage.stageWidth=800”这样的语句为舞台中的变量重新赋值。
Stage类不是动态类,不能向舞台stage动态地添加属性。
主时间轴的名字是root,它是由MainTimeline类创建的对象。
主时间轴其实是一个特殊的影片剪辑实例,它的图层、帧的使用方法与影片剪辑实例完全相同。
写在帧中的代码都属于主时间轴。
可以这样认为,写在帧中的变量都在MainTimeline类中,而root是由MainTimeline 类创建的对象,这些变量都成了root的属性,因此可用“root.属性名”的形式来访问这些变量。
学习ActionScript 3.0实例1循序渐进学习ActionScript 3.0(一)*动态修改影片的帧频在AS3中,你可以使用Stage类动态的修改影片的帧频。
Stage类(flash.display.Stage)的stage对象是所有的sprite和MovieClip 以及其他在安全沙箱里的所有元件的舞台。
stage对象的帧频可以是0.01到1000之间的任何一个数。
要修改帧频,使用下面的代码:// 将帧频修改到12帧每秒(FPS)stage.frameRate = 12;*类方法的作用域和类绑定在一起AS3完全基于类构造。
当一个类被创建的时候,类中的参数,变量,方法或任何实例都同时被创建。
和AS2不同,AS3中的方法在执行的时候,将使用和类同样的作用域。
例如下面的代码:package {import flash.display.Sprite;public class ClassScope extends Sprite {public function ClassScope() {traceThis(); // 输出"Class Instance"var obj:Object = new Object();obj.traceThis = traceThis;obj.traceThis(); // 输出"Class Instance"traceThis.call(new Sprite()); // 输出"Class Instance" }public override function toString():String {return "Class Instance";}public function traceThis():void {trace(this);}}}*图形对象和绘图API和AS1和AS2一样,AS3也提供了绘图API来绘制矢量线段和图形。
ActionScript3.0实用教程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返回的对象作为显示对象,是没有任何影片剪辑属性的,所以我们需要将它重新转型为有用的影片剪辑。
第1章 ActionScript概述ActionScript最初是由Macromedia(现已被Adobe收购)为其Flash产品开发的一种简单脚本语言,现在最新版本为3.0(简称AS3),已经成为一种完全面向对象(OOP)的编程语言。
ActionScript是一种基于ECMAScript的脚本语言,可用于编写Adobe Flash动画和应用程序。
由于ActionScript和JavaScript都是基于ECMAScript语法的,理论上它们可以流畅地互相翻译。
但是,JavaScript的文档对象模型(DOM)是以浏览器窗口、文档和表单为主的,ActionScript的文档对象模型则以SWF格式的动画为主,包括动画、音频、文字和事件。
1.1 ActionScript 3.0简介ActionScript ActionScript 3.03.0在使用时与以前2个版本有很多相似之处,但是由于底层的不同,在理解内部机制时最好从全新的角度出发,尤其要注意不同版本的代码不能混用。
一些处理方法也发生了比较大的变化,比如事件模型,显示对象的方法等,接触过ActionScript ActionScript 1.0 1.0或ActionScript ActionScript 2.0 2.0的读者要格外注意。
1.2 ActionScript 3.0开发环境3.0的第一步就是要安装设置开发环境。
本使用ActionScriptActionScript 3.03.0的几种常用开发环境,并简要说节将介绍ActionScriptActionScript 3.03.0开发环境比较熟悉的明各自的优缺点。
对ActionScriptActionScript 3.0读者可以略过本节。
1.2.1 Flash CS3/CS43.0的软件之一,同ActionScript 3.0Flash CS3/CS4是官方支持ActionScript时拥有强大的动画编辑和界面设计功能,被很多设计师和3.0程序员来说动画和动画师所青睐,但对于ActionScriptActionScript 3.0设计界面并不是必须的。
ActionScript3.0无基础入门教程ActionScript3.0入门教程:加载外部素材虽然说ActionScript2.0与ActionScript3.0熟练使用任意一门都可以,但是ActionScript3.0带来了许多新的.开发感受。
新时代的Flash已经开始向ActionScript3.0转型,许多新的Flash框架与Flash资料都是基于ActionScript3.0。
所以还是两门双修好勒。
ActionScript2.0的Helloworld已经在《【ActionScript】ActionScript2.0的Helloworld》(点击打开链接)中介绍过了。
下面开始介绍ActionScript3.0的Helloworld。
1、首先,打开Flash之后,新建ActionScript3.0文件,而不是ActionScript2.0。
其实两者在基本布局上面是没有区别的,关键是其脚本发生根本性的变化。
会ActionScript2.0的开发者,很容易就能转到ActionScript3.0上面来。
2、之后,通过窗口-组件,或者Ctrl+F7,或者通过右侧面板工具栏的“组件”按钮,打开“组件面板”。
这里面,Flash提供了许多向C#,VB等窗口控件。
在User Interface文件夹中拖入Button与Label,一个按钮,一个标签文本。
3、之后,调整这两个控件的属性。
对于按钮,赋予其实例名称为Button1。
其Label属性为“单击”。
对于标签文本,赋予其实例名册为"Label1",autoSize为Center居中,text的内容去掉。
4、之后,右击第1帧,打开动作面板,就可以写代码。
在动作面板写入如下代码:[javascript] view plain copy print?//定义一个字符串str,其值为Hello worldvar str:String="Hello world";//定义一个函数,为clickEventvar clickEvent:Function=function(){//此函数触发之后,把Label1的文本改成strLabel1.text= str;//然后向控制台输出strtrace(str);}//之后为Button1添加点击事件的监听器,为clickEvent这个函数Button1.addEventListener("click",clickEvent);按Ctrl+Enter编译之后,得到如下的效果:按钮被点击之后,标签文本的值变为Hello world,同时控制台中输出一个Helloworld。
Actionscript3快速入门(一)——编程基础AS3即ActionScript3.0的简称。
ActionScript 动作脚本是遵循ECMAscript第四版的Adobe Flash Player 运行时环境的编程语言。
它在Flash 内容和应用程序中实现交互性、数据处理以及其他功能。
ActionScript是Flash的脚本语言,与JavaScript相似,ActionScript是一种面向对象编程语言。
编程基础因为ActionScript是一种编程语言,所以,如果您首先了解几个通用的计算机编程概念,则会对您学习ActionScript 很有帮助。
计算机程序的用途首先,对计算机程序的概念及其用途有一个概念性的认识是非常有用的。
计算机程序主要包括两个方面:■ 程序是计算机执行的一系列指令或步骤。
■ 每一步最终都涉及到对某一段信息或数据的处理。
通常认为,计算机程序只是您提供给计算机并让它逐步执行的指令列表。
每个单独的指令都称为“语句” 。
正如您将在本手册中看到的那样,在ActionScript 中编写的每个语句的末尾都有一个分号。
实质上,程序中给定指令所做的全部操作就是处理存储在计算机内存中的一些数据位。
举一个简单的例子,您可能指示计算机将两个数字相加并将结果存储在计算机的内存中。
举一个较复杂的例子:假设在屏幕上绘制了一个矩形,您希望编写一个程序将它移动到屏幕上的其它位置。
计算机跟踪该矩形的某些信息—该矩形所在位置的x、y 光标、它的宽度和高度以及颜色等等。
这些信息位中的每一位都存储在计算机内存中的某个位置。
为了将矩形移动到其它位置,程序将采取类似于“将x 坐标改为200;将y 坐标改为150”的步骤(也就是说,为x 和y 坐标指定新值)。
当然,计算机的确会对这些数据进行某些处理,以便切实地将这些数字转变为显示在计算机屏幕上的图像;但考虑到我们所感兴趣的详细程度,我们只要知道“在屏幕上移动矩形”这一过程确实只涉及更改计算机内存中的数据位就足够了。
Actionscript3快速入门(一)——编程基础编程基础因为ActionScript是一种编程语言,所以,如果您首先了解几个通用的计算机编程概念,则会对您学习ActionScript 很有帮助。
计算机程序的用途首先,对计算机程序的概念及其用途有一个概念性的认识是非常有用的。
计算机程序主要包括两个方面:■ 程序是计算机执行的一系列指令或步骤。
■ 每一步最终都涉及到对某一段信息或数据的处理。
通常认为,计算机程序只是您提供给计算机并让它逐步执行的指令列表。
每个单独的指令都称为“语句” 。
正如您将在本手册中看到的那样,在ActionScript 中编写的每个语句的末尾都有一个分号。
实质上,程序中给定指令所做的全部操作就是处理存储在计算机内存中的一些数据位。
举一个简单的例子,您可能指示计算机将两个数字相加并将结果存储在计算机的内存中。
举一个较复杂的例子:假设在屏幕上绘制了一个矩形,您希望编写一个程序将它移动到屏幕上的其它位置。
计算机跟踪该矩形的某些信息—该矩形所在位置的x、y 光标、它的宽度和高度以及颜色等等。
这些信息位中的每一位都存储在计算机内存中的某个位置。
为了将矩形移动到其它位置,程序将采取类似于“将x 坐标改为200;将y 坐标改为150”的步骤(也就是说,为x 和y 坐标指定新值)。
当然,计算机的确会对这些数据进行某些处理,以便切实地将这些数字转变为显示在计算机屏幕上的图像;但考虑到我们所感兴趣的详细程度,我们只要知道“在屏幕上移动矩形”这一过程确实只涉及更改计算机内存中的数据位就足够了。
变量和常量由于编程主要涉及更改计算机内存中的信息,因此在程序中需要一种方法来表示单条信息。
“变量”是一个名称,它代表计算机内存中的值。
在编写语句来处理值时,编写变量名来代替值;只要计算机看到程序中的变量名,就会查看自己的内存并使用在内存中找到的值。
例如,如果两个名为value1 和value2 的变量都包含一个数字,您可以编写如下语句以将这两个数字相加:value1 + value2在实际执行这些步骤时,计算机将查看每个变量中的值,并将它们相加。
在ActionScript 3.0 中,一个变量实际上包含三个不同部分:■ 变量名■ 可以存储在变量中的数据的类型■ 存储在计算机内存中的实际值刚才我们讨论了计算机是如何将名称用作值的占位符的。
数据类型也非常重要。
在ActionScript 中创建变量时,应指定该变量将保存的数据的特定类型;此后,程序的指令只能在该变量中存储此类型的数据,您可以使用与该变量的数据类型关联的特定特性来处理值。
在ActionScript 中,要创建一个变量(称为“声明”变量),应使用var 语句:var value1:Number;在本例中,我们指示计算机创建一个名为value1 的变量,该变量仅保存Number 数据(“Number”是在ActionScript 中定义的一种特定数据类型)。
您还可以立即在变量中存储一个值:var value2:Number = 17;在Adobe Flash CS3 Professional 中,还包含另外一种变量声明方法。
在将一个影片剪辑元件、按钮元件或文本字段放置在舞台上时,可以在“属性”检查器中为它指定一个实例名称。
在后台,Flash 将创建一个与该实例名称同名的变量,您可以在ActionScript 代码中使用该变量来引用该舞台项目。
例如,如果您将一个影片剪辑元件放在舞台上并为它指定了实例名称rocketShip,那么,只要您在ActionScript 代码中使用变量rocketShip,实际上就是在处理该影片剪辑。
数据类型在ActionScript 中,您可以将很多数据类型用作所创建的变量的数据类型。
其中的某些数据类型可以看作是“简单”或“基本”数据类型:■ String:一个文本值,例如,一个名称或书中某一章的文字■ Numeric:对于numeric 型数据,ActionScript 3.0 包含三种特定的数据类型:■ Number:任何数值,包括有小数部分或没有小数部分的值■ Int:一个整数(不带小数部分的整数)■ Uint:一个“无符号”整数,即不能为负数的整数■ Boolean:一个true 或false 值,例如开关是否开启或两个值是否相等简单数据类型表示单条信息:例如,单个数字或单个文本序列。
然而,ActionScript 中定义的大部分数据类型都可以被描述为复杂数据类型,因为它们表示组合在一起的一组值。
例如,数据类型为Date 的变量表示单个值—时间中的某个片刻。
然而,该日期值实际上表示为几个值:年、月、日、时、分、秒等等,它们都是单独的数字。
所以,虽然我们认为日期是单个值(可以通过创建一个Date 变量将日期作为单个值来对待),而在计算机内部却认为日期是组合在一起、共同定义单个日期的一组值。
大部分内置数据类型以及程序员定义的数据类型都是复杂数据类型。
您可能认识下面的一些复杂数据类型:■ MovieClip:影片剪辑元件■ Te x tFi e l d:动态文本字段或输入文本字段■ SimpleButton:按钮元件■ Date:有关时间中的某个片刻的信息(日期和时间)经常用作数据类型的同义词的两个词是类和对象。
“类”仅仅是数据类型的定义—就像用于该数据类型的所有对象的模板,例如“所有Example 数据类型的变量都拥有这些特性:A、B 和C”。
而“对象”仅仅是类的一个实际的实例;可将一个数据类型为MovieClip 的变量描述为一个MovieClip 对象。
下面几条陈述虽然表达的方式不同,但意思是相同的:■ 变量myV ariable 的数据类型是Number。
■ 变量myV ariable 是一个Number 实例。
■ 变量myV ariable 是一个Number 对象。
■ 变量myV ariable 是Number 类的一个实例。
Actionscript3快速入门(二)——处理对象处理对象ActionScript是一种面向对象的编程语言。
面向对象的编程仅仅是一种编程方法,它与使用对象来组织程序中的代码的方法没有什么差别。
先前我们将计算机程序定义为计算机执行的一系列步骤或指令。
那么从概念上讲,我们可能认为计算机程序只是一个很长的指令列表。
然而,在面向对象的编程中,程序指令被划分到不同的对象中—代码构成功能块,因此相关类型的功能或相关的信息被组合到一个容器中。
事实上,如果您已经在Flash中处理过元件,那么您应已习惯于处理对象了。
假设您已定义了一个影片剪辑元件(假设它是一幅矩形的图画),并且已将它的一个副本放在了舞台上。
从严格意义上来说,该影片剪辑元件也是ActionScript 中的一个对象,即MovieClip 类的一个实例。
您可以修改该影片剪辑的不同特征。
例如,当选中该影片剪辑时,您可以在“属性”检查器中更改许多值,例如,它的x 坐标、宽度,进行各种颜色调整(例如,更改它的alpha 值,即透明度),或对它应用投影滤镜。
还可以使用其它Flash 工具进行更多更改,例如,使用“任意变形”工具旋转该矩形。
在Flash 创作环境中修改一个影片剪辑元件时所做的更改,同样可在ActionScript 中通过更改组合在一起、构成称为MovieClip 对象的单个包的各数据片断来实现。
在ActionScript 面向对象的编程中,任何类都可以包含三种类型的特性:■ 属性■ 方法■ 事件这些元素共同用于管理程序使用的数据块,并用于确定执行哪些动作以及动作的执行顺序。
属性属性表示某个对象中绑定在一起的若干数据块中的一个。
Song 对象可能具有名为artist和title 的属性;MovieClip 类具有rotation、x、width 和alpha 等属性。
您可以像处理单个变量那样处理属性;事实上,可以将属性视为包含在对象中的“子”变量。
以下是一些使用属性的ActionScript 代码的示例。
以下代码行将名为square 的MovieClip移动到100 个像素的x 坐标处:square.x = 100;以下代码使用rotation 属性旋转square MovieClip 以便与triangle MovieClip 的旋转相匹配:square.rotation = triangle.rotation;以下代码更改square MovieClip 的水平缩放比例,以使其宽度为原始宽度的 1.5 倍:square.scaleX = 1.5;请注意上面几个示例的通用结构:将变量(square 和triangle)用作对象的名称,后跟一个句点(.) 和属性名(x、rotation 和scaleX)。
句点称为“点运算符” ,用于指示您要访问对象的某个子元素。
整个结构“变量名-点-属性名”的使用类似于单个变量,变量是计算机内存中的单个值的名称。
方法“方法”是指可以由对象执行的操作。
例如,如果在Flash 中使用时间轴上的几个关键帧和动画制作了一个影片剪辑元件,则可以播放或停止该影片剪辑,或者指示它将播放头移到特定的帧。
下面的代码指示名为shortFilm 的MovieClip 开始播放:shortFilm.play();下面的代码行使名为shortFilm 的MovieClip 停止播放(播放头停在原地,就像暂停播放视频一样):shortFilm.stop();下面的代码使名为shortFilm 的MovieClip 将其播放头移到第 1 帧,然后停止播放(就像后退视频一样):shortFilm.gotoAndStop(1);正如您所看到的一样,您可以通过依次写下对象名(变量)、句点、方法名和小括号来访问方法,这与属性类似。
小括号是指示要“调用”某个方法(即指示对象执行该动作)的方式。
有时,为了传递执行动作所需的额外信息,将值(或变量)放入小括号中。
这些值称为方法“参数” 。
例如,gotoAndStop() 方法需要知道应转到哪一帧,所以要求小括号中有一个参数。
有些方法(如play() 和stop())自身的意义已非常明确,因此不需要额外信息。
但书写时仍然带有小括号。
与属性(和变量)不同的是,方法不能用作值占位符。
然而,一些方法可以执行计算并返回可以像变量一样使用的结果。
例如,Number 类的toString() 方法将数值转换为文本表示形式:var numericData:Number = 9;var textData:String = numericData.toString();例如,如果希望在屏幕上的文本字段中显示Number 变量的值,应使用toString() 方法。