AS3.0类的一般结构.doc_第1页
AS3.0类的一般结构.doc_第2页
AS3.0类的一般结构.doc_第3页
AS3.0类的一般结构.doc_第4页
AS3.0类的一般结构.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

类的一般结构package public class MyClass 类成员; public function MyClass() /构造函数 package表示包的意思,表示类文件保存的位置,文件名与类名相同。建立为一个类后,我们就可以像flash提供的其它类一样,可在AS3.0代码中使用。如下var my:MyClass=new MyClass();类的成员有成员常量、成员变量、成员函数三种:如下的一个类packagepublic class MyClass public const pi:Number=3.1415926; public var r:Number; private var s:Number; public function MyClass() 其中pi为成员常量、r,s为成员变量、MyClass为成员函数。public,private是属性关键字,表示成员的可见性。public:表示指定类、常量、变量、方法可用于任何调用者。private:表示常量、变量、方法仅供声明它或定义它的类使用。protected:表示常量、变量、方法或命名空间只用于定义它的类及该类的任何子类。internal:表示类、常量、变量、方法可用于同一包中的任何调用者。请看下段代码var m:MyClass=new MyClass();m.r=3; /正确m.s=8; /错误要在外部改变s或访问s要如何呢?我们来修改一下MyClass如下packagepublic class MyClass public const pi:Number=3.1415926; public var r:Number; private var s:Number; public function MyClass() public function setSValue(value:Number):void s=value; 这样就有一个公共公共方法设置s的值,可以使用如下语句设置s的值。m.setSValue(18);与其它语言一样,我们可以使用get和set方法来读取与写入private变量的值。packagepublic class MyClass public const pi:Number=3.1415926; public var r:Number; private var s:Number; public function MyClass() trace(这是MyClass的构造函数); public function set sValue(value:Number):void s=value; public function get sValue():Number return s; 我们在调用时可以使用如下语句m.sValue=18; /当使用set方法后可以使用var a:Number=m.sValue; /当使用get方法后可以使用。类的继承继承是指一种代码重用的形式,允许程序员基于现有类开发新类。现有类通常称为“基类”或“超类”,新类通常称为“子类”。先看一段代码packagepublc class MySubClass extends MyClass public function MySubClass() trace(这是MySubClass构造函数); trace(“pi:”,pi); /正确 trace(“r:”,r); /正确 trace(s:,s); /错误 可以看到pi,r,s是在MyClass这个类中定义的常量、变量,那么由于MySubClass继承了MyClass,所以MySubClass也能使用这些量,但代码前两个是正确,后一个是错误,这是什么意思呢,回忆下上一节学到的“属性关键字”。public和protected在子类中是可以使用的,private是不行,所以这里pi和r可以使用的,s不能用,并且子类在构造的时候也会执行基类的构造方法。观察如下语句(将错误语句删除)var mySub:MySubClass=new MySubClass(); 输出为这是MyClass构造函数这是MySubClass的构造函数pi:3.1415926r:NaN上节的继承是继承我们自己定义的类,如果要用到影片和类关联起来,我们可能会更多的去继承AS3.0中已有的类Sprite的MovieClip;packageimport flash.display.Sprite;public class MySprite extends Sprite public function MySprite() graphics.beginFill(0xFFCC00); graphics.drawCircle(40,40,40); 现在我们建立一个MySprite的类,因为它是继承的Sprite类,所以我们可以使用graphics来画图,这里我们画一个圆。要使用这个类,我们同样要在帧上加一些代码:var mySprite:MySprite=new MySprite();addChild(mySprite);mySprite.x=100;mySprite.y=100;文档类:在FlashCs3.0中加入了一个文档类(document class)的概念,使用文档类后,我们刚才写帧上面的代码就不用了,直接写在文档类里面,文档类就相当于第一帧的位置,这样我们就不用在Fla文件里写代码了,所有代码都写在AS文件里达到了界面与代码的分离。写一个文档类packageimport flash.display.Sprite;public class MainForm extends Spritepublic function MainForm()var mySprite:MySprite=new MySprite();addChild(mySprite);mySprite.x=100;mySprite.y=100;新建一个fla文档(ActionSprite3.0),保存的同一个目录下,设置文档属性中的文档类为MainForm。加载库中的MC上一节中,我们将库中的MC键接到一个类上,达到了类与元件的绑件,那么要完成像2.0一样的效果,将库中的元件载入到场景中是不是也要在MC上链接类了(3.0中没有以前的标识符),如果每个在库中的MC 都要链接一个类就麻烦了,其它只需要在类后面起个名字就可以了。比如我们起个名字叫MyMc基类就用默认的flash.display.MovieClip(注意在点确定时有个找不到类我警告,不用管它,点确定就可以了),在文档类中这样写:packageimport flash.display.Sprite;public class MainForm1 extends Sprite public function MainForm1() var mymc:MyMc=new MyMc(); addChild(mymc); var mysound:MySound=new MySound(); mysound.play(); 同样,要播放库中的声音也可以这样做,链接的类后面取一个名字MySound,基类MySound,基类就用默认的flash.media.Sound反射的方式加载库里的MC在上一节中我们用到了在库中加载一个元件,我们还有另一个方法来加载一个元件,就是用“反射”的方法,反射就是用库中元件的名字(字符串)去得到我们想要的元件,用代码去把它变成一个类。我们在库中建立两个MC,并用上一节的方法将它们导出,名字分别为Mc1和Mc2,我们要将这两元件加载到场景上,按照上一节的方法,我们应该这样做:packageimport flash.display.Sprite;public class MainForm2 extends Sprite public function MainForm1() var mc1:MovieClip=new Mc1(); addChild(mc1); var mc2:MovieClip=new Mc2(); addChild(mc2); 那么如果用反射的方法应该怎样做呢,看下面的代码packageimport flash.display.Sprite;import flash.display.MovieClip;import flash.utils.getDefinitionByName;public class MainForm3 extends Spritepublic function MainForm3()var ClassReference:Class=getDefinitionByName(Mc1) as Class;var instance:MovieClip=new ClassReference();addChild(instance);这段代码只加载了Mc1这个元件,而且我们发现代码比上一种方法更复杂一些,那为什么要使用反射这种方法呢,我们在看一段代码:packageimport flash.display.Sprite;import flash.display.MovieClip;import flash.utils.getDefinitionByName;public class MainForm4 extends Spritepublic function MainForm4()for (var i:int=1;i=2;i+)var ClassReference:Class=getDefinitionByName(Mc+i) as Class;var instance:MovieClip=new ClassReference();instance.x=Math.random()*stage.stageWidth;instance.y=Math.random()*stage.stageHeight;addChild(instance);我们发现现在这种方法是不是更简单的一种写法,当库中有名字为Mc1,Mc2,Mc3这种更多的MC时,我们只需要改变循环变量的范围就可以了。事件在As3.0中我们用的最多的可能就是“事件”,我们会侦听各种事件。在3.0中我们一律用addEventListener这种加侦听的方式来完成。Btn.addEvetnListener(MouseEvent.CLICK,btnClickHandler);Function btnClickHandler(event:MouseEvent):void /点击后执行的代码我们将上一节代码稍加修改,如下packageimport flash.display.Sprite;import flash.display.MovieClip;import flash.utils.getDefinitionByName;import flash.events.MouseEvent;public class MainForm5 extends Spritepublic function MainForm5()for (var i:int=1;i9?(nowDate.getHours().toString():0+nowDate.getHours().toString();_model.minutes=nowDate.getMinutes()9?(nowDate.getMinutes().toString():0+nowDate.getMinutes().toString();_model.second=nowDate.getSeconds()9?(nowDate.getSeconds().toString():0+nowDate.getSeconds().toString();这个类中我们用到了Timer类因为我们用的是时钟,所以需要一个定时器,Timer是一个很好的定时器,Timer(1000,0),这里1000是指1000毫秒,就是1秒钟触发一次定时器,0表示次数,这里0是无限次,如果是大于0的数就是这个数的次数。侦听TimerEvent.TIMER事件就是1秒钟去执行一次timerHandler方法,timerHandler方法的功能得到当前的时间然后去改变_model里面的值,再看一下ModelLocator.as里面的代码,hour,minutes,second的值改变的时候就会去发消息出去,那么谁来侦听这些消息呢,当然是View,现在来看下View.aspackageimport flash.display.Sprite;import flash.events.Event;import flash.text.TextField;public class View extends Spriteprivate var _model:ModelLocator;private var _controller:Controller;private var time_txt:TextField;public function View(model:ModelLocator,controller:Controller):void_model=model;_controller=controller;time_txt=new TextField();addChild(time_txt);_model.addEventListener(changeHour,changeTimeHandler);_model.addEventListener(changeMinutes,changeTimeHandler);_model.addEventListener(changeSecond,changeTimeHandler);_controller.startTime();private function changeTimeHandler(event:Event):voidtime_txt.text=_model.hour+:+_model.minutes+:+_model.second;在View里面,侦听了_model的事件,所以当收到数据改变的消息后,将_model的数据显示到文本框架中。要使程序,我们现加一个文档类:packageimport flash.display.Sprite;public class Clock extends Spriteprivate var _model:ModelLocator;private var _controller:Controller;private var _view:View;public function Clock():void_model=new ModelLocator();_controller=new Controller(_model);_view=new View(_mode

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论