《3.0 动画基础.docx》由会员分享,可在线阅读,更多相关《3.0 动画基础.docx(19页珍藏版)》请在优知文库上搜索。
1、3.0动画基础3.0动画基础/s/articlelist_1053530897_3_l.html类和面对对象编程类(ClaSS)和面对对象(ObjeCtOriented),对于有些读者来说可能还没接触过而有些读者可能已经在AS(或其它语言)中运用类很多年了,为了让大家都能学会,我会扼要的介绍一下这些基础学问。就算是AS2的OOP专家也希望能略读下这一段,因为AS3.0的工作原理的确发生了很大的变更。假如你说你从没用过类,那你就错了,只要你在Flash中写过代码,那么事实上就已经运用了类。类可以简洁理解为一种对象,MovieClip就是影片剪辑的类,而文本框、影片剪辑、按钮、字符串和数值等都有它
2、们自己的类。一个类最基本的两个部分:属性(数据或信息),行为(动作或它能做的事)。属性(ProPerty)指用于保存与该类有关的信息变量,行为(BehaVior)就是指函数,假如一个函数是这个类中的一部分,那么我们就称它为方法(Method)。一个基本的类:常用Flash的挚友都知道,我们可以在库中创建一个元件,用这个元件可以在舞台上创建出很多的实例。与元件和实例的关系相同,类就是一个模板,而对象(犹如实例)就是类的一个特别表现形式。下面来看一个类的例子:packagepublicclassMyClasspublicvarmyProperty:Number=100;publicfunction
3、myMethod()tracedamhere);先来说明一下这段代码。在这里有些新的学问,对于AS2老手也如此:包的声明。包(PaCkage),作用就是把相关的类进行分组。知道这一点就够了,我们不再进行深化的探讨,本书的示例甚至不会用到包。Package这个关键字和一对大括号是必需有的,我们理解为默认包,紧随其后的就是类的定义。另一个变更是AS3.0中的类拥有了访问关键字。访问关键字是指:一个用来指定其它代码是否可访问该代码的关键字。public(公有类)关键字指该类可被外部任何类的代码访问。本书中全部示例的类都是public的。在深化学习了AS3.0后,我们会发觉不是全部类都是公有的,甚至还
4、有多重的类,这些内容超出了本书的谈论范围Q本例中我们可以看到,这个类的名字为MyClass,后面跟一对大括号。在这个类中有两种要素,一个是名为myProperty的变量,另一个是名为myMethod的函数。包(PaCkage)包主要用于组织管理类。包是依据类所在的书目路径所构成的,并可以嵌套多层。包名所指的是一个真正存在的文件夹,用.进行分隔。例如,有一个名为Utils的类,存在于文件夹com/friendsofed/makingthingsmove/中(运用域名作为包名是一个不成文的规定,目的是保证包名是唯一的)。这个类就被写成com.friendsofed.makingthingsmove
5、.Utils0在AS2中,运用整个包名来创建一个类,例如:classcom.friendsofed.makingthingsmove.Utils)在AS3中,包名写在包的声名处,类名写类的声名处,例如:packagecom.friendsofed.makingthingsmovepublicclassUtils导入(1.nPort)想象一下,每次要运用这个类的方法时都要输入com.friendsofed.makingthingsmove.Utils,是不是太过烦琐太过死板了。别担忧,import语句可以解决这个问题。在这个例子中,可以把下面这句放在package中类定义的上面:importco
6、m.friendsofed.makingthingsmove.Utils;C构造函数(COnStrUCtor)构造函数是指一个名字与类名相同的方法。当该类被实例化时,该函数会被自动调用,也可以传入参数,例如:首先,创建一个类:packagepublicclassMyClasspublicfunctionMyClass(arg:String)trace(constructed);trace(youpassed+arg);然后,假设工作在FlashCS3IDE(集成开发环境)中,在时间轴上创建该实例:varmyInstance:MyClass=newMyClass(hello);结果输出:cons
7、tructedyoupassedhello继承(InheritanCe)一个类可以从另一个类中继承(inherit)和扩展(extend)而来这就意味着它获得了另一个类全部的属性和方法(除了那些被private掩盖住的属性)。所生成的子类(派生类)还可以增加更多的属性和方法,或更改父类(基类)已有的属性或方法。要分别创建两个类来实现(两个独立的.as文件),例如:packagepublicclassMyBaseClasspublicfunctionsayHello():voidtrace(HellofromMyBaseClass);packagepublicclassMySubClassext
8、endsMyBaseClasspublicfunctionSayGoodbye():voidtrace(GoodbyefromMySubClass);不要遗忘,每个类都必需在其自身的文件中,文件名为该类的类名,扩展名.as,所以必须要有MyBaseClass.as文件和MySubClass.as文件。因此,在运用FlashCS3IDE时,保存的F1.A文件,要与这两个类在同一个文件夹。下面代码会生产两个实例,把它写入时间轴看看会发生什么:varbase:MyBaseClass=newMyBaseClass();base.sayHello();varSubiMySubClass=newMySub
9、Class();sub.sayHello();sub.SayGoodbyeO;第一个实例没什么可说的,值得留意的是其次个实例中的SayHello方法,虽然在MySubClass中没有定义SayHello,但它却是继承自MyBaseClass类的。另一个值得留意的是,增加了一个新的方法SayGoodbye,这是父类所没有的。下面说说,在子类中如何变更一个父类中已存在的方法。在AS2中,我们可以只须要重新定义这个方法就可以了。而在AS3中,则必需明确地写出override关键字,来进行重新定义。packagepublicclassMySubClassextendsMyBaseClassoverri
10、depublicfunctionSayHello():voidtrace(HolafromMySubClass);publicfunctionSayGoodbye():voidtrace(GoodbyefromMySubClass);请留意,原来的SayHello方法被重写,再调用MySubClass后,就有了新的信息。另外,私有成员也不能被重写,因为它们只能被它们自身的类访问。MovieClipZSprite子类我们可以自己写一个类,然后让另一个类去继承它。在AS3中,全部代码都不是写在时间轴上的,那么它们一起先都要继承自MovieClip或SpriteoMovieClip类是影片剪辑对象属
11、性和方法的ActionScript模板。它包括我们所熟识的属性如:影片的x,y坐标,缩放等,这些在AS3中的变更不大。AS3还增加了Sprite类,通常把它理解为不在时间轴上的影片剪辑。很多状况下,只运用代码操作对象,并不涉刚好间轴和帧,这时就应当运用Sprite这个轻型的类。假如一个类继承自MovieClip或Sprite,那么它会自动拥有该类全部的属性和方法,我们还可以为这个类增加特别的属性和方法。例如,嬉戏设计一个太空船的对象,我们希望它拥有一个图形,并且在屏幕的某个位置移动,旋转,并为动画添加enterFrame侦听器,还有鼠标、键盘的侦听等。这些都可以由MovieClip或Sprit
12、e来完成,所以就要继承自它们。同时,还可以增加一些属性如:速度(SPeed)、油量(fuel)、损坏度(damage),还有像起飞(takeff)坠落(crash)射击(shoot)或是自毁(selfDestruct)等方法。那么这个类或许是这样的:packageimportflash,display.Sprite;publicclassSpaceShipextendsSpriteprivatevarSpeedrNumber=O;privatevardamage:Number=O;privatevarfuel:Number=100O;publicfunctiontakeff():void/.p
13、ublicfunctioncrash():void/.publicfunctionshoot():void/publicfunctionSelfDestructO:void/.留意,首先要导入flash,display包中的Sprite类,假如要导入MovieClip类,同样也须要导入这个相同的包flash,display.MovieClip类。创建文档类(DOCUInentclass)现在我们对类已经了肯定的了解,接下来,看看假如真正地运用它。有时候我常说基于AS3的SWF是多么的重要,这是因为AS3引入了一个全新的概念,文档类(documentclass)o一个文档类就是一个继承自Spri
14、te或MovieClip的类,并作为SWF的主类。读取SWF时,这个文档类的构造函数会被自动调用。它就成为了我们程序的入口,任何想要做的事都可以写在上面,如:创建影片剪辑,画图,读取资源等等。假如在FlashCS3IDE中写代码,可运用文档类,也可以选择接着在时间轴上写代码。但假如运用FlexBuilder2或免费FlexSDK,那里没有时间轴,唯一的方法就是写在类中。这些工作一切都围围着强大的文档类而绽开,没有它就没有SWFo以下是一个文档类的框架:packageimportflash,display.Sprite;publicclassTestextendsSpritepublicfunc
15、tionTest()init();privatefunctioninit():void/写代码处假如你看过前面的部分,不会认为这是个新学问,只不过是把他们放在了一起而已。运用默认包,导入并继承Sprite类。构造函数只有一句,调用init方法。当然,也可以把全部代码写在构造函数里,但是要养成一个好习惯,就是尽量削减构造函数中的代码,所以把代码写到了另一个方法中。本书会给大家很多代码块进行测试,那时要像上面这个例子一样把代码块放入init方法中,这样在影片编译执行时,就会调用init中的代码。下面我们要起先学习如何连接文档类和SWFo运用FlashCS3IDE(集成开发环境)FlashCS3IDE是实现文档类的最便利的工具。把上述的类选择一个文件夹进行保存,文件名为TeSt.as。打开FlashCS3,创建一个F1.A文件,保存到一这个类相同的书目下。确认F1.A默认发布设置为FlashPlayer9及AS3.O0在属性面板中,我们留意到出现了一个名为文档类(DoCUmentClass)的区域(图2-1)o只需输入类名:Test0图2-1设置文档类请