AS30类的一般结构

上传人:ji****72 文档编号:35911477 上传时间:2018-03-22 格式:DOC 页数:13 大小:76KB
返回 下载 相关 举报
AS30类的一般结构_第1页
第1页 / 共13页
AS30类的一般结构_第2页
第2页 / 共13页
AS30类的一般结构_第3页
第3页 / 共13页
AS30类的一般结构_第4页
第4页 / 共13页
AS30类的一般结构_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《AS30类的一般结构》由会员分享,可在线阅读,更多相关《AS30类的一般结构(13页珍藏版)》请在金锄头文库上搜索。

1、类的一般结构 packagepublic class MyClass类成员;public function MyClass() /构造函数 package 表示包的意思,表示类文件保存的位置,文件名与类名相同。建立为一个类后,我 们就可以像 flash 提供的其它类一样,可在 AS3.0 代码中使用。 如下 var my:MyClass=new MyClass(); 类的成员有成员常量、成员变量、成员函数三种: 如下的一个类 package public class MyClasspublic const pi:Number=3.1415926;public var r:Number;priv

2、ate var s:Number;public function MyClass() 其中 pi 为成员常量、r,s 为成员变量、MyClass 为成员函数。public,private 是属性关键字, 表示成员的可见性。 public:表示指定类、常量、变量、方法可用于任何调用者。 private:表示常量、变量、方法仅供声明它或定义它的类使用。 protected:表示常量、变量、方法或命名空间只用于定义它的类及该类的任何子类。 internal:表示类、常量、变量、方法可用于同一包中的任何调用者。 请看下段代码 var m:MyClass=new MyClass(); m.r=3; /正

3、确 m.s=8; /错误 要在外部改变 s 或访问 s 要如何呢?我们来修改一下 MyClass 如下 package public class MyClasspublic const pi:Number=3.1415926;public var r:Number;private var s:Number;public function MyClass()public function setSValue(value:Number):voids=value; 这样就有一个公共公共方法设置 s 的值,可以使用如下语句设置 s 的值。 m.setSValue(18); 与其它语言一样,我们可以使用

4、 get 和 set 方法来读取与写入 private 变量的值。 package public class MyClasspublic const pi:Number=3.1415926;public var r:Number;private var s:Number;public function MyClass()trace(这是 MyClass 的构造函数);public function set sValue(value:Number):voids=value;public function get sValue():Numberreturn s; 我们在调用时可以使用如下语句 m.

5、sValue=18; /当使用 set 方法后可以使用 var a:Number=m.sValue; /当使用 get 方法后可以使用。类的继承 继承是指一种代码重用的形式,允许程序员基于现有类开发新类。现有类通常称为“基类” 或“超类” ,新类通常称为“子类” 。 先看一段代码 package publc class MySubClass extends MyClasspublic function MySubClass()trace(这是 MySubClass 构造函数);trace(“pi:”,pi); /正确trace(“r:”,r); /正确trace(s:,s); /错误 可以看到

6、 pi,r,s 是在 MyClass 这个类中定义的常量、变量,那么由于 MySubClass 继承了 MyClass,所以 MySubClass 也能使用这些量,但代码前两个是正确,后一个是错误,这是 什么意思呢,回忆下上一节学到的“属性关键字” 。public 和 protected 在子类中是可以使用 的,private 是不行,所以这里 pi 和 r 可以使用的,s 不能用,并且子类在构造的时候也会 执行基类的构造方法。观察如下语句(将错误语句删除) var mySub:MySubClass=new MySubClass(); 输出为 这是 MyClass 构造函数 这是 MySubC

7、lass 的构造函数 pi:3.1415926 r:NaN 上节的继承是继承我们自己定义的类,如果要用到影片和类关联起来,我们可能会更多的 去继承 AS3.0 中已有的类Sprite 的 MovieClip; package import flash.display.Sprite; public class MySprite extends Spritepublic function MySprite()graphics.beginFill(0xFFCC00);graphics.drawCircle(40,40,40); 现在我们建立一个 MySprite 的类,因为它是继承的 Sprite

8、类,所以我们可以使用 graphics 来画图,这里我们画一个圆。 要使用这个类,我们同样要在帧上加一些代码: var mySprite:MySprite=new MySprite(); addChild(mySprite); mySprite.x=100; mySprite.y=100; 文档类: 在 FlashCs3.0 中加入了一个文档类(document class)的概念,使用文档类后,我们刚才写帧 上面的代码就不用了,直接写在文档类里面,文档类就相当于第一帧的位置,这样我们就 不用在 Fla 文件里写代码了,所有代码都写在 AS 文件里达到了界面与代码的分离。 写一个文档类 pac

9、kage import flash.display.Sprite; public class MainForm extends Sprite public function MainForm() var mySprite:MySprite=new MySprite(); addChild(mySprite); mySprite.x=100; mySprite.y=100; 新建一个 fla 文档(ActionSprite3.0),保存的同一个目录下,设置文档属性中的文档类为 MainForm。 加载库中的 MC上一节中,我们将库中的 MC 键接到一个类上,达到了类与元件的绑件,那么要完成像 2

10、.0 一样的效果,将库中的元件载入到场景中是不是也要在 MC 上链接类了(3.0 中没有以 前的标识符) ,如果每个在库中的 MC 都要链接一个类就麻烦了,其它只需要在类后面起 个名字就可以了。 比如我们起个名字叫 MyMc 基类就用默认的 flash.display.MovieClip(注意在点确定时有个找 不到类我警告,不用管它,点确定就可以了),在文档类中这样写: package import flash.display.Sprite; public class MainForm1 extends Spritepublic function MainForm1()var mymc:MyM

11、c=new MyMc();addChild(mymc);var mysound:MySound=new MySound();mysound.play(); 同样,要播放库中的声音也可以这样做,链接的类后面取一个名字 MySound,基类 MySound,基类就用默认的 flash.media.Sound 反射的方式加载库里的 MC 在上一节中我们用到了在库中加载一个元件,我们还有另一个方法来加载一个元件,就是 用“反射”的方法,反射就是用库中元件的名字(字符串)去得到我们想要的元件,用代 码去把它变成一个类。 我们在库中建立两个 MC,并用上一节的方法将它们导出,名字分别为 Mc1 和 Mc2

12、,我们 要将这两元件加载到场景上,按照上一节的方法,我们应该这样做: package import flash.display.Sprite; public class MainForm2 extends Spritepublic function MainForm1()var mc1:MovieClip=new Mc1();addChild(mc1);var mc2:MovieClip=new Mc2();addChild(mc2); 那么如果用反射的方法应该怎样做呢,看下面的代码 package import flash.display.Sprite; import flash.displ

13、ay.MovieClip; import flash.utils.getDefinitionByName; public class MainForm3 extends Sprite public function MainForm3() var ClassReference:Class=getDefinitionByName(“Mc1“) as Class;var instance:MovieClip=new ClassReference(); addChild(instance); 这段代码只加载了 Mc1 这个元件,而且我们发现代码比上一种方法更复杂一些,那为什么 要使用反射这种方法呢,

14、我们在看一段代码: package import flash.display.Sprite; import flash.display.MovieClip; import flash.utils.getDefinitionByName; public class MainForm4 extends Sprite public function MainForm4() for (var i:int=1;i9?(nowDate.getHours().toString():0+nowDate.getHour s().toString();_model.minutes=nowDate.getMinut

15、es()9?(nowDate.getMinutes().toString():0+nowDate.g etMinutes().toString();_model.second=nowDate.getSeconds()9?(nowDate.getSeconds().toString():0+nowDate.g etSeconds().toString(); 这个类中我们用到了 Timer 类因为我们用的是时钟,所以需要一个定时器,Timer 是一个 很好的定时器,Timer(1000,0),这里 1000 是指 1000 毫秒,就是 1 秒钟触发一次定时器,0 表示次数,这里 0 是无限次,如果

16、是大于 0 的数就是这个数的次数。侦听 TimerEvent.TIMER 事件就是 1 秒钟去执行一次 timerHandler 方法,timerHandler 方法的功 能得到当前的时间然后去改变_model 里面的值,再看一下 ModelLocator.as 里面的代码, hour,minutes,second 的值改变的时候就会去发消息出去,那么谁来侦听这些消息呢,当然 是 View,现在来看下 View.as package import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; public class View extends Sprite private var _model:ModelLo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号