您的位置: 首页 > 技术文档 > 多媒体制作 > Moock在FF2K1大会上的演说
FLV MetaData Injector 回到列表 Macromedia Breeze 快速安装
 Moock在FF2K1大会上的演说

作者:chocobo 时间: 2004-04-27 文档类型:翻译 来自:蓝色理想

第 1 页 由O开始
第 2 页 基础、解读、还有一些概念
第 3 页 开始第一个版本的选择题的制作
第 4 页 再来补充一点AS知识
第 5 页 可以重复的函数
第 6 页 第二个版本选择题的制作
第 7 页 数组(arrays)
第 8 页 第三个版本的选择题
第 9 页 一点面向对象编程知识
第 10 页 第四个版本的选择题
第 11 页 XML
第 12 页 最后一个版本选择题

第十一章:一点面向对象编程知识

At is heart, OOP simply means that you treat portions of your program as self-contained, but interrelating modules called objects.
这是什么呀?我不翻译了,概念的我们就先不懂吧,对象主要构成包括属性(properties)和方法(methods)。一个对象通常都以现实世界里的某个东东做蓝本。
例如我们可以定义一个对象叫球,那么这个球将会有这样的属性:半径、X坐标、Y坐标、颜色。同时,也会用属于球自己的方法例如:移动球、计算球的面积

当然,我们还可以定义一些相对抽象的对象,例如我们要做的多选题

所有的对象都属于某类(class),类的意思其实是用于创建对象的模版

一个实例(instance)就是某一个类的特定某一个case(好复杂,概念性的东西我翻不过来啦,反正实例就类创建出来的某一个对象)

还是再举例吧
* 例如我们有个一个叫Chair的类
* 这个类定义了一个东西需要它有四条腿,一个坐垫
* 然后我们就可以用Chair这个类来定义我们的不同对象(可理解为椅子的款式),每个对象就有它特有的高、宽、材料、重量、颜色,正是这些属性使每个对象互相区别。

所有的椅子互相区别,有自己的属性,但是他们又有同样的结构:四条腿、一个坐垫

OK,那AS里面的类和对象呢?
是的,AS里我们可以自己创建对象,也有可以使用的内建对象
内建的类(你可以用它来创建对象)包括:Array, Boolean, Color, Date, MovieClip, Number, Object, Sound, String, XML, XMLSocket
内建的对象(已经可以直接使用的对象)包括:Arguments, Key, Math, Mouse, Selection
内建的类、对象当然都是在FLASH里面有自己功能的东西。而正是这些功能非常常用,FLASH才内建了这些类和对象,例如:
Mouse.hide(); // Hide the mouse pointer 将鼠标隐藏,你经常用吧?现在才知道其实是内建的Mouse对象的一个hide()方法吧?

在学习如何创建自己的类和对象之前,先来了解一下内建类和对象是怎样工作的吧

与数组的结构类似,对象是容器们(containers)的容器(container)
一个对象,用各个独立的属性来存放数据,只不过数组区分每个容器是用数字,而对象则是用属性名,要调用一个数组里面某个数据,我们需要它是索引值,而要调用对象的属性,则要知道属性名
看看以下这个例子,这是个叫BALL的对象:

点击查看大图

BALL对象有两个属性:radius 和 color
而两个属性分别赋值为:50 和 0xFF0000 (这是AS里面表达16进制的方法)

概念清楚了,说一AS里面使用对象要注意的地方

首先,对象的属性很灵活,它储存的数据可以是strings(字符串), numbers(数字), booleans(布尔值), null(空), undefined(未定义), functions(函数), arrays(数组), movie clips(电影夹子), or even other objects(甚至是其他的对象,包括自定义的).

调用属性,可用点语法:objectName.propertyName
例如我们赋值给BALL里面的属性radius:
ball.radius = 100;

我们也可以用符号[]来访问属性,但是[]里面的属性名需用双引号扩住,同上例:
ball["radius"] = 100; (所以说数组也是对象一种,访问方法也一样,并没有搞特殊化)
与点语法比较,[]更灵活,可以动态地改变属性的名字,里面可以是变量或表达式,例如:
var propName = "radius";
ball[propName] = 100;
这点是点语法无法办到的

纯粹的OOP中,我们几乎不会直接访问对象的属性
我们一般都使用方法(methods) ,来改变属性
例如改变mySound这个声音对象的音量属性
AS的用法应该是mySound.getVolume(100);
而不是mySound.volume=100;
但是为了简单,多选题这个例子里不一定遵循这个原则,事实上AS里面很多对象都不可以办到这点,所以有人说AS不是面向对象语言。

关于对象的方法

方法method其实是一些附属于对象的函数,其作用主要是访问对象中的数据,或完成某种功能。所以调用方法和调用普通函数类似:objectName.methodName() 只是前面加上了对象的名字。
例如上面的BALL对象,我们需要它的面积,使用 getArea 这个方法:
ball.getArea();

预习一下,在下一个例子中,虽然MOOCK不打算建立自己的方法,但是将使用内建于MovieClip对象的两个方法:
*MovieClip.attachMovie()
此方法是将Library(CTRL+L按出来的那个)里面的symbol复制一个instance到场景中
(chocobo:给不懂概念的人紧急补习,放在库(Library)里面的叫符号(symbol),拉到场景中就叫实例(instance),一个符号可创建多个实例,符号改变则实例随之改变)
与之类似的是MovieClip.duplicateMovieClip(),但是该方法需要事先在场景里已经有一个实例

*MovieClip.removeMovieClip()
此方法与上面相反,是删除场景里面的instance的

大家看到了,在下一例中,我们将使用MovieClip这个内建对象,因为它就可以满足我们的需要,不必新类型的对象了
我们先来熟悉一下MC这种对象

它有很多属性_height(高度)、 _alpha (透明度),MC的属性大家可以在AS字典里面查到,在AS面板里这写属性也是变色显示的。同时MC的方法,例如 MC.play(); 等也可以查到。当我们在MC里面的时间线使用这些属性、方法的时候,可以省略不写前面部分,直接写play();

MC可以互相嵌套,MC当中又有MC,就出现类似: mc1.mc2.play(); 的情况
为了调用包含自己的上一级MC的方法、属性,AS里面用_parent,例如:
在mc1包含mc2 ,在mc2中想使mc1播放:_parent.play();
还有另一个保留字:_root指代该电影的主时间线
例如想在某个mc里面让整个电影播放:_root.play();
想在某个MC中让另一mc1播放:_root.mc1.play();

还有,MC中定义的变量,将作为MC的一个属性可被访问
在mc1里面写了一句 var a=1;
我们将可使用 mc1.var来调用它

关于类(class)

这个概念大家还是不大懂吧?类就是定义一个对象将拥有什么的方法跟属性的东东,类似MC里instance与symbol的关系,instance的结构就是由symbol决定的,每个instance又可以不一样
AS里面没有专门定义类的例如class这样的关键字,我们使用函数来定义类,这种函数称构造函数constructor function,函数的作用就是产生我们定义好的类的实例(就是对象)
举例最实在:
// make a Ball constructor 最简单的构造函数
function Ball () {
// do nothing 里面是空的
}

现在我们可以定义新类型Ball的对象了
myBall = new Ball();
语法就是前面是新对象实例名,等号后是new加构造函数名
myBall就拥有了Ball定义的一切结构了(虽然Ball里面是空的,嘻嘻)

不过不是所有对象创建都用new,例如mc创建就用的是attachMovie()或duplicateMovieClip()

好了,我们的构造函数总不能空的,如何定义类,让新对象有自己的属性呢?
使用this这个关键字,看例子,新的构造函数:
function Ball () {
   this.radius = 10;
   this.color = 0xFF0000;
   this.xPosition = 35;
   this.yPosition = -4;
}

以后我们定义出来的新对象,都拥有半径,颜色、XY坐标属性啦
慢着,怎么每个新对象都一模一样啊?
再改,用函数的参数来定义动态的属性:
// Make the Ball constructor accept
// property values as arguments.
function Ball (radius, color, xPosition, yPosition) {
   this.radius = radius;
   this.color = color;
   this.xPosition = xPosition;
   this.yPosition = yPosition;
}

我们可以定义不同属性的对象了
myBall = new Ball(6, 0x00FF00, 145, 200);

本教程关于还有创建方法以及如何在类之间继承方法和属性没讲,
无论如何,OOP都不可能在这么短时间之内说清楚,
但这不妨碍我们做下一个例子了。

出处:蓝色理想
责任编辑:qhwa

上一页 第三个版本的选择题 下一页 第四个版本的选择题

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
Flash 酷站猎手
中文ID3乱码问题MX解决方案
用AS2解决中文ID3的乱码
Flash常用效果-移动模糊效果
Flash MX 2005 制作环境预览
作者文章
Moock在FF2K1大会上的演说
制造像素字体,FLASH MX2K4?
flash mx 2004的項目管理
原 Blueidea 首页调查彻底解析
Royale,為程序員設計的FLASH?
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:9/121个记录/页 转到 页 共12个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2