1、 trace(这是写的第一个类);在d:exam下建立一个FLA文件,在第一帧写如下代码:import net.smilecn.MyClass;var myClass:MyClass = new MyClass();那么在输出面板里就会输出“这是写的第一个类”。 import net.smilecn.MyClass:导入写的类(类在使用前要导入net.smilecn是包名,MyClass是类名)。 var myClass:MyClass = new MyClass(): 实例化MyClass这个类(实例化的时候会执行构造函数,那么就会执行trace这句代码)。成员常量、变量和方法首先看一段代码
2、: public const PI:Number = 3.1415926; public var r:Number; private var s: 在前面的基础上增加了几行代码,其中:const是定义常量,var是定义变量,所谓的常量就是不能改变的量,变量就是能够改变的量;public、private是属性关键字。在ActionScript 3.0中属性关键字有这样几个: public:指定类、变量、常量或方法可用于任何调用者。 private:指定变量、常量或方法仅可供声明或定义它的类使用。 protected:指定变量、常量、方法或命名空间只可用于定义它的类及该类的任何子类。 intern
3、al:指定类、变量、常量或函数可用于同一包中的任何调用者。下面主要说明public、private这两个属性关键字。从字面上理解public是公共的意思,说简单点就是任何地方都可以调用;private是私有的意思,就是说只有这个类中才可以调用。举例说明,在前面用的FLA文件中的第一帧加上这个的代码:myClass.r = 3; /正确 myClass.s = 18; /错误 可以看到因为r声明为public,所以在外部调用是正确的,s声明为private,所以不直接在外部访问s这个变量,这就是public和private的区别。如果要在外部改变s的值,则可以修改MyClass类,如下: pub
4、lic function setSValue(value:Number):void s = value;这样通过一个公共方法(就是函数)设置了s的值,可以在FLA文件中调用:myClass.setSValue(18);当然跟其它语言一样,也可以用get和set方法来读取或写入private变量的值: public function MyClass() public function set sValue(value:void public function get sValue():Number return s;在调用的时候就可以用这样的语句了:myClass.sValue =18; /(当
5、使用过set后可以这样操作) var a = myClass.sValue; /(当使用过get后可以这样操作) 继承继承是指一种代码重用的形式,允许程序员基于现有类开发新类。现有类通常称为“基类”或“超类”,新类通常称为“子类”。 import net.smilecn.MyClass;/类在使用之前要先导入 public class MySubClass extends MyClass public function MySubClass() Pi:,PI);/正确 trace(r:,r);s:,s);/错误 发现这个类比之前写的类多了“extends”这个一个关键字。这个关键字的作用就是说
6、明,MySubClass类是继承MyClass类的,继承之后就可以使用MyClass这个类里的变量和方法了,这样就达到代码重用的目的。例如,现在要写关于若干个球的类,有足球、篮球、排球等,那么可以先找出这些的共性,先写一个球的类,然后再继承这个球的类写出若干个球的类。由于相同的东西写在球的类中了,这就达到了代码重用。可以看出,PI,r,s是在MyClass这个类中定义的变量,那么由于MySubClass继承了MyClass,所以MySubClass也能使用这些变量。但值得注意的是,public和protected可以在子类中使用,而private则不行。所以这里PI和r可以使用,s不能用,并且
7、子类在构造的时候也会执行基类的构造方法。改一下FLA文件的代码:import net.smilecn.MySubClass;var mySubClass:MySubClass = new MySubClass();mySubClass.r = 3;在输出面板会输出:这是写的第一个类PI:3.1415926NaN注意:标有错误的那句代码要去掉,不然会报错。下节继续讲解继承. (编辑:非熊) -类的继承二 当前位置:主页 AS入门 作者:arrowyoung 发表于:2009-08-29Tag:菜鸟教程 继承 在上节中,我们介绍到了继承,继承在我们的实际应用中是用的比较多的一种方式。 上节的继承是
8、继承我们自己定义的类,如果要用到影片和类关联起来,我们可能会更多的去继承AS3中已有的类Sprite和MovieClip;MovieClip这个类我们在2.0中就经常用到,就是影片剪辑,Sprite是什么了,其实就是一个没有帧的 MovieClip,在没有动画的情况下我们会更多的使用Sprite,来看一段代码:package net.smilecn import flash.display.Sprite; public class MySprite extends Sprite public function MySprite() graphics.beginFill(0xFFCC00); g
9、raphics.drawCircle(40, 40, 40); 现在我们建立一个MySprite的类(注意保存的AS文件名一定要跟类名一样),因为它是继承的Sprite类,所以我们可以使用graphics来画图,这里我们画了一个圆。 要使用这个类,我们同样要在帧上加一些代码:import net.smilecn.MySprite; var mySprite:MySprite = new MySprite(); addChild(mySprite); mySprite.x=100; mySprite.y=100; 这里首先我们还是建一个实例,名字叫做mySprite,接下来我们用到了这句:add
10、Child(mySprite); addChild相当于2.0里面把库中的元件载入到场景中,用了addChild后我们画的那个圆就显示在场景中了,与之对应的是removeChild,是从场景中删除 接下来 mySprite.x=100; 是设置坐标位置,因为是继承的Sprite,因为Sprite有x、y属性,所以MySprite也有了(注意x,y相当于2.0里面的_x和_y) 上面的代码MySprite是用代码画的一个图形,有很多图形我们不可能都用代码去画,这样就失去FLASH的主要功能了,我们还可以把库中的元件链接到MySprite这个类中。 我们新建一个MC,在库中在这个MC上点右键,点链
11、接,会出现一个对话框,将为ActionScript导出打上勾,在上面类的后面填上要链接的类,这里我们填上:net.smilecn.MySprite ;基类那里我们填上:flash.display.Sprite 然后再发布看看,会发现不仅有刚才画的圆,我们在刚才的那个MC里画任何东西都会在里面,这样就做到了元件和类的链接。 在FLASH CS3中还加入了一个文档类(document class)的概念,使用文档类后,我们刚才写帧上面的代码就不用了,直接写在文档类里面,文档类就相当于第一帧的位置,这样我们就不用在FLA文件里写代码了,所有代码都写在AS文件里,达到了界面和代码的分离。 现在在建立一
12、个类,MainForm.as: import net.smilecn.MySprite; public class MainForm extends Sprite public function MainForm() var mySprite: 我们发现刚才第一帧的代码搬到这个类里面来了,那个第一帧的代码就可以全部删除掉 最后在FLA的属性栏中找到文档类,在后面输入类的位置:net.smilecn.MainForm(注意是包名加类名) 好,现在发布看一下,是不是跟刚才的效果一样。投稿: 有疑问:去艾睿论坛 交朋友:去友吧 -加载库中MC 2009-08-30Tag:菜鸟教程 加载库中MC 上一
13、节中,我们将库中的MC链接到一个类上,达到了类与元件的绑件,那么要完成像2.0一样的效果,将库中的元件载入到场景中是不是也要在MC上链接类了(3.0中没有以前的标识符),如果每个在库中的MC都要链接一个类就麻烦了,其实只需要在类后面起个名字就可以了。 比如我们起个名字叫MyMc,基类就用默认的flash.display.MovieClip(注意在点确定时有个找不到类的警告,不用管它,点确定就可以了),在文档类中这样写: import flash.display.MovieClip; public class MainForm extends Sprite public function Mai
14、nForm() var myMc:MovieClip = new MyMc(); addChild(myMc); 同样,要播放库中的声音也可以这样做,方法一样,链接在类后面起个名字,比如MySound,基类就用默认的flash.media.Sound import flash.media.Sound; var mySound:Sound = new MySound(); mySound.play();play方法是播放声音 通过上述方法,我们可以通过代码将库中的元件加载到场景中或播放库中的声音。反射的方式加载库里的MC 2009-09-01Tag:反射 加载MC 在上一节中我们用到了在库中加载
15、一个元件,我们还有另一个方法来加载一个元件,就是用反射的方法,反射就是用库中元件的名字(字符串)去得到我们想要的元件,用代码去把它变成一个类. 我们在库中建立两个MC,并用上一节的方法将它们导出,名字分别为:Mc1和Mc2,我们要将这两个元件加载 到场景上,按照上一节的方法,我们应该这样做: public class MainForm extends Sprite public function MainForm() var mc1:MovieClip = new Mc1(); addChild(mc1); var mc2:MovieClip = new Mc2(); addChild(mc2
16、); 那么如果用反射的方法应该怎样做呢,看下面的代码: import flash.utils.getDefinitionByName; public class MainForm extends Sprite public function MainForm() var ClassReference:Class = getDefinitionByName(Mc1) as Class; var instance:MovieClip = new ClassReference(); addChild(instance); 这段代码只加载了Mc1这个元件,而且我们发现代码比上一种方法更复杂一些,那为什
17、么要使用反射这种方法呢,我们在看一段代码: public class MainForm extends Sprite public function MainForm() for(var i=1;i=2;i+) var ClassReference:Mc+i) as Class; 我们发现现在这种写法是不是更简单的一种写法,当库中有名字为Mc1,Mc2,Mc3这种更多的MC时,我们只需要改变循环变量的范围就可以了. -事件 事件 菜鸟教程 在as3.0中我们用的最多的可能就是事件 ,我们会侦听各种事件. 当我们点击一个按钮时,在2.0中我们可能会用到这样的语句: _btn.onPress =
18、function(); 当然后我们也可以用addEventListener来侦听一个点击事件.在3.0中我们一律用addEventListener 这种加侦听的方式来完成. _btn.addEventListener(MouseEvent.CLICK,btnClickHandler); function btnClickHandler(event:MouseEvent):void /点击后代码 这是一个单击事件,基本上我们用到的系统里的所有类都会有事件,在帮助文档中我们可以找到,我们可以很方便的使用这些事件. 我们现在把上一节中我们用到的代码稍加一下变动: import flash.event
19、s.MouseEvent; instance.name = mc +i; instance.addEventListener(MouseEvent.CLICK,insClickHandler); private function insClickHandler(event:void trace(你点击了:,event.currentTarget.name); event.currentTarget是指当前侦听的对像,加个name属性就是这个对像的名字,这里MouseEvent就是鼠标事件;Sprite、MovieClip、SimpleButton、Button这一些都可以加鼠标事件侦,当然不止
20、这一些(注:SimpleButton是元件按钮,Button是组件按钮) MouseEvent.CLICK这个实际上是一个常量,代表着click这个字符串,从字面上我们就可以看出这个是单击的意思,通常这些事件其实都可以字面上看到意思,像MouseEvent.MOUSE_DOWN就是鼠标按下事件,值得一提的是3.0里面加上了双击事件,是MouseEvent.DOUBLE_CLICK,不过使用双击还要使doubleClickEnabled 为true才行. 我们不可能从别人那里知道一个类有多少种事件,所以帮助是最好的老师,我们学习AS3最好的教程其实就是帮助,所以要勤看帮助,这样才能进步更快. 下
21、节继续讲解事件侦听. 事件侦听 2009-09-03Tag:事件侦听 菜鸟教程 在上一节中我们介绍了侦听,要知道我们可能经常会用到侦听,所以我们会写很多个addEventListener,经常有些侦听我们用过一次后可以就不会再用了,那么为了节省资源,我们要将这些侦听删除掉,要侦除侦听这们用这样的方法:instance.addEventListener(MouseEvent.CLICK,insClickHandler);/添加侦听 instance.removeEventListener(MouseEvent.CLICK,insClickHandler);/删除侦听 这里我们用removeEve
22、ntListener 就可以将侦听删除掉,我们在编程过程中,已经不用的侦听我们应该及时删除掉以节省资源. 现在我们来看一个小例子,这个例子的功能是有两个按钮,点击其中一个自己变成不可点击,另一个变成可点击状态. import flash.display.SimpleButton; public class MainForm extends Sprite public function MainForm() _btn1.addEventListener(MouseEvent.CLICK,btnClickHandler); private function btnClickHandler(event: _btn1.addEventListener(MouseEvent.CLICK,btnClickHandler); _btn2.addEventListener(MouseEvent.CLICK,btnClickHandler); event.currentTarget.removeEventListener(MouseEvent.CLICK,btnClickHandler); 在我们上一