商家名称 | 信用等级 | 购买信息 | 订购本书 |
Flash ActionScript3殿堂之路(含光盘1张) [平装] | |||
Flash ActionScript3殿堂之路(含光盘1张) [平装] |
《Flash ActionScript3殿堂之路》适合有基础编程知识(不限语言)的Flash、Flex、AIR爱好者和开发人员,尤其适合ActionScript 2读者。本书还可为Java、C#等其他OOP语言爱好者学习ActionScript 3提供横向比较和导读。
前言
ActionScript 3与RIA时代的到来
具有高度互动性、丰富用户体验及功能强大的客户端,是目前网络开发的迫切需求。Adobe公司的Flash Player凭借其全球97%的桌面电脑占有率和跨平台的优势,成为了事实上的下一代的RIA(Rich Internet Application,丰富因特网程序)主力。Adobe公司于2006年年中推出了强大的ActionScript 3 语言,和支持ActionScript 3 的新一代的虚拟机AVM 2。经测试,AVM 2执行ActionScript 3代码比以前的ActionScript 2 代码执行效率要快10倍以上。
ActionScript 3,与ActionScript 2和1有本质上的不同,是一门功能强大的、面向对象的、具有业界标准素质的编程语言。它是 Flash Player 运行时功能发展中的重要里程碑。ActionScript 3是快速构建Rich Internet Application的理想语言。
由于Adobe的Flex和Flash的成功,在业界已经掀起了RIA应用新浪潮!雅虎(Yahoo!)、eBay、Google都相继推出基于ActionScript的RIA应用程序和ActionScript API库。著名的应用案例有Yahoo Maps、eBay AIR拍卖程序、Google Analytics和Google Finance、微软的Wallop社区,等等。
ActionScript 3 有以下优势:
对面向对象编程(OOP)语言的完全支持。核心语言基于ECMAScript(ECMA 262)标准,对OOP架构深层优化。
彻底更新的显示对象系统架构。
采用了先进的E4X,使XML成为ActionScript 3 语言的内建数据类型(native support)。操作直白、简单。与ActionScript 2比较,极大地减轻了XML数据处理工作量。
全面支持正则表达式。正则表达式也成了ActionScript 3的内建数据类型,ActionScript 3对字符串的处理能力空前增强。
标准的DOM 3事件实现。Flash API全面支持事件机制。
异常处理机制。 异常包括信息全面、易于调试和处理。Flash API全面支持异常处理机制。
此外,ActionScript 3 积极迈向开源,赢得开源社区的欢迎。包括AVM 2虚拟机开源 ,源码赠送与Mozilla的Tamarin项目。Tamarin项目的开源,意味着ActionScript 3 虚拟机的开源。从而ActionScript 3 也将成为智慧无穷的开源社区的首选!
2007年6月11日推出了Adobe Intergrated Runtime(AIR) Beta版,正式实现新一代的RIA概念——跨系统运行时(cross-operating system)的RIA程序。首次允许RIA程序访问本地资源,并进行离线存储,跳出了浏览器的限制,模糊了浏览器和桌面程序的界限,在线和离线的界限。AIR具有革命性的前瞻视角,被业界誉为RIA的第二次革命。而ActionScript 3就是用于开发AIR程序的主要核心语言。
ActionScript 3的时代已经到来!我们正在迎接它的辉煌!
本书的目标与特色
本书目标
ActionScript 开发界缺少一本真正的以面向对象思想来讲解的书籍,缺少从ActionScript 3语言架构上来分析的书籍。无论国内还是国外目前都缺少这样一本书。很多ActionScript 开发人员都只停留在知道OOP语法、会熟练运用ActionScript 3 提供的类库API阶段,而对OOP思想和ActionScript 3 整个系统架构脉络一知半解。买椟还珠,这是很可惜的。
本书尝试以系统架构师的眼光,以面向对象思想为主轴,讲述ActionScript 3中面向对象的精髓和应用。从ActionScript 3 系统架构的高度,清楚明白地讲解ActionScript 3的API设计原因、原理和应用。
面向对象思想和ActionScript 3系统架构就是RIA开发的任督二脉,打通之后,你就会觉得所有ActionScript 3知识都是共通共融、浑然一体的,从而再学习广阔的ActionScript 3开源世界中的其他东西时,也会觉得高屋建瓴、势如破竹 、轻松如意。
在本书中,对于ActionScript 3中的面向对象讲解的广度和深度都远超过目前所有书籍。从广度上说,涵盖了OOP语法、重要API的运用、核心类包的结构……从深度上说,详细地解释了面向对象实现上的重大变化和实现细节,透彻地阐述了新一代的显示编程架构及应用。比如 ActionScript 3的几大新特色、重要的OOP法则、ActionScript 3语言本身在哪些地方使用了设计模式。从实用上说,每一个重要的应用都有实际的代码例子相结合,例如,有类绑定的种种实际做法和UIMovieClip类与Flex结合应用等。本书不仅仅介绍相关语法和运用,更重要的是解释如何设计与怎样使用。
本书希望把你真正带往ActionScript 3编程的殿堂。
本书特色
本书是一本“面向原因式”的书籍(Why-Oriented Book)。让你对所有细节的设计用意和原因清清楚楚。
以ActionScript 3 语言设计的本意和思路,深浅结合,讲解各个部分。尽可能使读者在了解ActionScript 3 语言的同时,更好地把握ActionScript 3 语言的思想。
重视实际运用,例子丰富。不算文中代码片段,仅完整类文件就近两百个,为编程提供实际的指导。本书在撰写所有部分时,力求达到两点:与实际的代码例子结合;讲述ActionScript 3 语言关于该部分的内部实现和技术细节。
以面向对象思想(OOP)为重点,例子和比喻结合。系统讲述了OOP思想及其在ActionScript 3 中的运用。并结合ActionScript 3本身的语言架构加以详细的分析。
横向比较其他优秀OOP语言。本书中有大量涉及到ActionScript 3和Java、C#等语言相比较的地方,使得已有其他OOP语言基础的读者可以快速了解ActionScript 3的独特之处,快速上手。
清楚地阐述ActionScript 2和ActionScript 3的不同及原因。对于ActionScript 3 大部分相对于ActionScript 2 的改动,本书不但一一指出,还从理论上解释为何改变,以及相关的实现,使ActionScript 2 程序员快速上手ActionScript 3 ,并对ActionScript 2代码移植有相当大的帮助。
本书为何而写
长时间以来,国内ActionScript 方面的书籍总是落后国外同类书籍一年到两年,很大程度上影响了ActionScript 在国内的推广和国内爱好者水平的提高。本书作者从事大型ActionScript 2 RIA项目开发已有数年经验,在Flash Player 8.5出现、ActionScript 3推出测试版开始,就已开始研究其架构,积累了丰富的第一手开发笔记。因此,本书的写作与国际ActionScript 3的研究发展是完全同步的。
笔者在电子工业出版社的大力协助下,以严谨的学术态度撰写本书。笔者衷心期望,本书出版时,不仅是国内ActionScript 界第一本与国际同步的书籍,也能抛砖引玉,加速推动国内ActionScript 3 的研究开发步伐。
本书为谁而写
本书所讲的知识用于Flash、Flex下的ActionScript 3应用程序开发。本书的读者应具有基本的编程知识(不限语言),至少应理解变量、循环、函数等基本编程概念。
写一本从ActionScript 3 初学者、ActionScript 3 中级爱好者到其他OOP语言(如C#、 Java)开发者都能看的书,是一件很有野心的事,事实上也难以完全做到。
但据笔者观察,国内ActionScript 爱好者水平参差不齐。有部分ActionScript 2 高手,但更多的是ActionScript 2 或1中级爱好者,以及准备从Flash Designer(Flash设计)转向ActionScript 3 的新手。更有广大的其他OOP语言的读者,比如C#、 Java等,拥有良好的OOP基础,准备转向ActionScript 3 。随着RIA革命的到来,未来还有更多的、潜在的ActionScript 爱好者。
这样的现状促使我向这个不可能的任务做一些力所能及的努力。经过分析,这几个群体有比较明显的特征,使得我可以在讲述的同时有所侧重,择善结合。
对初学者
你可能喜欢比较浅显的比喻和详细的讲解。有时告诉你原因,比简单罗列代码告诉你怎么做,可以更快让你理解根本,进入状态。本书正是这样一本Why-Oriented Book。本书与其他书的一个最大不同就是“面向原因”(Why-Oriented Book)的讲述方式,让你对每部分内容的由来清清楚楚。
如果你对ActionScript 一点都不熟,那么恭喜你,你赶上好时候了。ActionScript 3 比以往的ActionScript 2或ActionScript 1要好学很多,好记很多。原因就是ActionScript 3 的结构更加标准和统一。不信,举个小例子,在ActionScript 2 中创建一个视觉元件的实例有 attachMovie()、createChildAtDepth()、createClassObject()……等八九种方法,每种方法都有自己的参数,而且要手动管理元件深度。而在ActionScript 3 中,一切都统一为new 元件名()就可以了。深度统一且自动管理。这样的改进实在太多了!
所以抛开相对混乱的ActionScript 1和ActionScript 2,放心大胆地学习ActionScript 3吧。能直接学习ActionScript 3,绝对是新手的福气!
对于ActionScript 中级爱好者
你往往具有一定水平和能力,ActionScript 2各个方面都有涉猎,但都不深。你需要有针对性的细节点拨和思路指导。你往往不喜欢婆婆妈妈的讲解,最喜爱具体的代码例子。但往往对自己掌握的程度估计不足,对自己知道的东西不加以深究,和高手的差距就在这里。本书用章节“*”号(有相当数量)和进阶知识这两个部分来针对这个群体。
众所周知,知识的讲解应当是一个整体,不能每个知识点都有初级、中级、高级之分。你清楚的东西,对你而言就是初级。你不清楚的东西,往往就是高级。你知道并了解,但是不知道细节的东西,那就是中级。因此对于中级爱好者,我建议,在你快速翻完了本书所有“*”号和进阶知识之后,有空时你最好从头详细读一下其他章节。我相信,你绝对不虚此“读”。很多有用的知识点和ActionScript 3 技术上的实现细节,你可能还不清楚。举个小例子,比如, “加Label的continue、break的用法”,不少读者可能就不太清楚。
加油,高手的称号指日可待!
ActionScript高级爱好者
你有一定的开发经验和知识水平,知道很多ActionScript 2 细节。但是ActionScript 2 和ActionScript 3 区别如此之大,你会感觉到有点沮丧。但,沮丧不久,你就会被ActionScript 3 标准的架构、优雅的实现和无限的潜能所吸引。
你甚至发现ActionScript 3 其实比ActionScript 1、ActionScript 2要好学很多 ,好记很多。再过不了多久,你会发现ActionScript 3 是如此好用,如此方便,如此先进,以致于不可能再转回ActionScript 2了。这时候就逼你的老板用ActionScript 3开发产品吧。It’s your time。
本书中有大量地方标注了和ActionScript 2不同的地方,可以让你快速地进入ActionScript 3的工作状态。并且提供了很多ActionScript 3中独有的技术细节和小技巧,为你日后的开发扫清很多小地雷。
对C#、Java爱好者和开发者
恭喜你,其实ActionScript 3 比它前辈的任何一个版本都接近C#、Java这两种语言。你学习ActionScript 3 ,将是真正的事半功倍。
你真正想要知道的是,ActionScript 3和C#、Java有哪些不同点?ActionScript 3 编程有哪些部分需要重点学习?API有哪些不同,哪些是重点?在ActionScript 3中哪些细节需要注意?
在本书中对大部分涉及到语言差异的地方都做了标注。你要做的是,看一下每章前面的导读,抓住重点,快速浏览章节。融会贯通这些基本的不同点之后,重点掌握ActionScript 3视觉编程部分和熟悉一些关键的API。当然,我特别建议你有空时能从头详细读一遍本书,很多ActionScript 3 独有的技术细节和小技巧可能是你需要了解的。
你会发现, ActionScript 3 编程是这么的方便和美妙!ActionScript 3 这个标准的OOP语言,用起来是这么熟悉和顺手!和Flash合作编出的界面是这么漂亮优雅,易于拓展!强烈推荐你花点时间看一看第1章。
本书结构
第1部分:ActionScript 3语言基础
第2部分:ActionScript 3 面向对象编程
第3部分:ActionScript 3 核心类
第4部分:ActionScript 3主要的Flash Player API
第5部分:ActionScript 3视觉编程
如何使用本书
本书建议按照章节顺序阅读。初级爱好者读到带“*”号的章节时,如有不明白的地方可以暂时跳过,以后有时间时回头再读。每章都有“本章导读”,读者可根据具体的“章节导读”来进行阅读。
另外,本书提供了详细的章节目录、代码例子目录、表格目录等,也可以作为ActionScript 3 简要的工具书使用。在本书中,对类名、变量、代码、术语和重点句都特别用了样式来标明。
“样式和格式”中的名称范 例
类名!类名ErrorEvent, EventDispatcher
变量和代码!变量和代码updaetAfterEvent()
重点强调句!重点文字被关键字final定义过的实例方法不能被重写;父类的private成员不能被重写
编程语言关键字!关键字instanceof
如何使用本书中的例子和源代码
随书光盘中有一个视频教程目录,为swf格式。里面有详细的视频教程教你如何更加有效地使用本书中的例子和光盘中的源代码。
勘误及反馈
读者如果对本书有意见和建议,请到笔者个人博客http://books.kingda.org上交流。
本书涉及面广,内容多,难免有所错漏。勘误信息也会第一时间在http://books.kingda.org 上公布。书中所有术语翻译参考ActionScript 3 官方文档和微软的.NET术语对照表。
致谢
感谢我的父母,亲情永远是我强大的动力!感谢我的MM,谢谢你容忍我一年多来不曾陪你逛街!
感谢我的公司和同事!我们是一流的团队,追求顶尖的RIA体验!成功属于勤奋者。
感谢电子工业出版社易飞思公司郭晶女士、何郑燕女士。多谢二位的耐心,支持我一再推迟交稿期限,给予我相对充分的时间写作。多谢二位的热情和信任,这在写书的苦闷中给了我很大的支持。在此特表感谢!
著 者
网名“黑羽”,英文名“Kingda Sun”,浙江大学硕士。浙江大学元老级闪客,曾任蓝色理想网站Flash版版主。 现任杭州Genway Online Learning Tech Co.,Ltd 前端架构总设计师。 拥有著名的个人Flash技术博客 : www.kingda.org,Google Pagerank值高达6,被Adobe官方MXNA收录。也被国内蓝色理想BXNA等诸多聚合器收录。另拥有www.actionscript3.cn站点,专门讨论ActionScript 3 相关开发话题。 经历:第二届浙江省大学生多媒体竞赛课件类省一等奖, 动画类省二等奖。浙江大学第二届大学生多媒体作品设计竞赛一等奖。担任前端设计的NCE online课件被国家教育部评定为国际先进课件。
第1部分 ActionScript 3语言基础
第1章ActionScript 3语言介绍与开发环境3
1.1ActionScript 3介绍3
1.1.1ActionScript发展历史简述4
1.1.2Flash Player 9和AVM 25
1.1.3Macromedia和Adobe的合并6
1.1.4ActionScript 3与开源世界6
1.2ActionScript 3的特色6
1.2.1核心语言新特色7
1.2.2Flash Player API 功能的新特色8
1.3ActionScript 3 程序开发工具9
1.3.1Flash CS39
1.3.2Flex 2 、Flex 3及Flex SDK9
1.4*ActionScript 3程序的编译流程10
1.5熟悉开发环境和第一个“Hello,world”例子10
1.5.1在Flash CS3中创建“Hello,world”11
1.5.2在Flex Builder中创建“Hello, world”12
1.6本章小结13
第2章ActionScript 3语言基本元素15
2.1ActionScript 3中数据的本质及重要性质15
2.1.1*一切都是对象(Object)15
2.1.2ActionScript 3中数据类型概述16
2.2变量的声明和使用16
2.2.1声明变量的语法17
2.2.2变量命名规则17
2.2.3*变量的本质18
2.2.4*重要:值类型和引用类型的区别19
2.2.5基元数据类型的深入讨论*21
2.3使用const声明常量23
2.4基础(非基本)数据类型23
2.4.1布尔值:Boolean24
2.4.2数字:int、uint、Number24
2.4.3重要:使用int、uint、Number应当注意的事项25
2.4.4字符串:String28
2.4.5数组:Array29
2.4.6Object及关联数组30
2.4.7多维数组32
2.4.8Null、NaN、undefined及各自应用对象:变量的默认值33
2.5运算符、表达式及运用35
2.5.1什么是运算符、表达式?以及运算符的设计用意35
2.5.2在ActionScript 3中使用操作符35
2.5.3*运算符的本质36
2.5.4最常用的运算符:赋值运算符(=)36
2.5.5算术运算符:加、减、乘、除、模运算、求反运算36
2.5.6算术赋值运算符:+=、-=、*=、/=、%=37
2.5.7关系运算符(1):==、!=、===、!===38
2.5.8关系运算符(2):>=,<=,>,<,39
2.5.9逻辑运算符(&&、||、!)40
2.5.10三元if-else运算符(?:)41
2.5.11typeof、is、as41
2.5.12*in42
2.5.13delete:ActionScript 3中的作用变了42
2.5.14优先级顺序43
2.6ActionScript 3的保留字43
2.7本章小结44
第3章ActionScript 3流程控制45
3.1什么是面向过程?看一个找书的例子45
3.2true和false:条件表达式的结果47
3.3if-else47
3.3.1最常用的if和if…else47
3.3.2if…else if … else的用法和注意点48
3.4循环49
3.4.1循环的三要素49
3.4.2while50
3.4.3do-while50
3.4.4for51
3.4.5* for…in 和for each…in52
3.4.6break和continue的简单用法53
3.4.7*控制嵌套循环的流程:break 和continue的标签用法54
3.5switch57
3.6本章小结59
第4章ActionScript 3中的函数及高级使用技巧61
4.1两种定义函数方法61
4.1.1函数语句定义法61
4.1.2函数表达式定义法62
4.1.3*两种定义法的区别和选择62
4.2参数64
4.2.1按值还是按引用来传入参数64
4.2.2设置默认参数65
4.2.3访问参数信息和…(rest)关键字65
4.3*函数的本质66
4.3.1函数语句定义法定义的函数对象本质67
4.3.2函数表达式定义法定义的函数对象本质67
4.4*函数高级使用技巧68
4.4.1技巧一:代理函数对象68
4.4.2技巧二:建立函数执行队列68
4.4.3技巧三:利用函数返回函数70
4.4.4技巧四:函数动态添加实例属性72
4.4.5技巧五:函数对象动态添加实例方法72
4.5本章小结74
第2部分 ActionScript 3面向对象编程
第5章类和对象——从定义到原理77
5.1第一个ActionScript 3简单的Class(类)例子77
5.2Class(类)和Object(对象)79
5.2.1Class和Object的权威定义80
5.2.2Class和Object的区别81
5.3Class的成员81
5.4Class和Object的创建和使用82
5.4.1创建Class82
5.4.2创建类的实例83
5.5Class和package(包)83
5.6实例属性和实例方法84
5.6.1如何声明实例属性85
5.6.2如何声明实例方法85
5.6.3如何访问实例属性和实例方法86
5.7静态属性和静态方法88
5.7.1静态属性和静态方法的使用场合88
5.7.2声明静态属性和静态方法89
5.7.3访问静态属性和静态方法89
5.7.4应用1:使用静态属性集中管理数据90
5.7.5应用2:使用静态属性部分实现Enumeration91
5.7.6应用3:实现工具类92
5.8构造函数93
5.8.1构造函数实例94
5.8.2构造函数只能使用public访问控制95
5.8.3构造函数的返回类型95
5.9Class的种类:动态类和密封类96
5.10this关键字97
5.11*ActionScript 3中的方法重载99
5.12*含有多个类的ActionScript 3类文件的标准例子100
5.13本章小结102
第6章ActionScript 3中的封装: 类的成员、类、包与访问控制105
6.1什么是封装105
6.2为什么需要封装106
6.2.1封装使修改代码更加容易和安全106
6.2.2封装让代码分成一个个相对独立的单元107
6.2.3封装让整个软件开发的复杂度大大降低107
6.3ActionScript 3中封装的几个层次108
6.4package(包)109
6.4.1包的导入(import)109
6.4.2使用Import避免命名冲突111
6.4.3package的创建和命名112
6.5*原理:编译器如何导入package113
6.5.1类路径114
6.5.2编译器导入package的顺序114
6.6类成员的访问控制115
6.6.1Internal:包内访问115
6.6.2public:完全公开118
6.6.3private:仅当前类可访问118
6.6.4protected:子类可访问120
6.7Getter和Setter方法120
6.8类(Class)的访问控制122
6.9包外类123
6.10本章小结125
第7章*命名空间127
7.1命名空间的简要解释128
7.1.1命名空间与一词多义128
7.1.2第一个命名空间的代码例子129
7.1.3命名空间无处不在130
7.2使用命名空间的流程130
7.3命名空间的本质132
7.3.1命名空间的唯一性132
7.3.2系统如何生成命名空间的默认uri133
7.4如何定义命名空间133
7.4.1将命名空间定义在独立的.as文件中134
7.4.2命名空间定义在类中134
7.5如何应用命名空间135
7.6如何引用命名空间135
7.6.1打开命名空间136
7.6.2使用命名空间名称限定符“::”137
7.6.3自定义命名空间和public 、private 、protected、internal141
7.7命名空间有哪些实际应用143
7.8本章小结143
第8章复合与继承145
8.1如何实现复合(Composition)146
8.1.1一个复合的例子146
8.1.2初始化复合的对象148
8.1.3复合与聚合的区别150
8.2如何实现继承150
8.2.1创建自定义类与ActionScript 3 默认的继承151
8.2.2继承的表现和一个具体例子151
8.2.3静态成员的继承153
8.2.4继承与访问控制154
8.2.5继承与重写(Override)155
8.2.6继承与私有方法:易错的误区156
8.2.7继承与super关键字157
8.2.8用final终止继承157
8.2.9何时使用final158
8.3*自定义命名空间的继承158
8.4何时用复合,何时用继承161
8.5本章小结161
第9章多态163
9.1数据类型检查和转换164
9.2向上转换(Upcasting)166
9.2.1简述里氏代换原则167
9.2.2向上转换(Upcasting)的代码例子167
9.3向下转换(Downcasting)170
9.3.1向下转换的两种方法171
9.3.2向下转换的代码例子172
9.4本章小结173
第10章*抽象类和接口175
10.1什么是抽象类(Abstract Class)175
10.1.1使用抽象类的原则176
10.1.2使用抽象类的例子177
10.1.3*如何用ActionScript 3实现真正的抽象类和抽象方法177
10.2什么是接口179
10.2.1*接口是OOP编程的重要基石180
10.2.2如何创建接口181
10.2.3如何实现接口181
10.2.4接口与多继承、向上转换、向下转换184
10.2.5接口的继承186
10.2.6接口类型188
10.3抽象类和接口的区别188
10.3.1何时使用抽象类,何时使用接口189
10.3.2*将接口和抽象类结合使用190
10.4本章小结191
第3部分 ActionScript 3核心类
第11章ActionScript 3核心类和全局函数195
11.1ActionScript 3中核心类和函数的变化及原因196
11.2核心类的数目和列表196
11.3核心类和函数的作用和地位198
11.4本章小结198
第12章数组:Array199
12.1数组(Array)的介绍199
12.1.1访问数组元素199
12.1.2数组的长度200
12.1.3多维数组201
12.2数组(Array)的基本操作201
12.2.1查找:indexOf、lastIndexOf201
12.2.2在数组首尾新增元素:push、unshift202
12.2.3删除数组首尾元素:pop、shift203
12.2.4在数组当中插入或者删除元素:灵活多变的splice204
12.2.5获取数组中的部分元素:slice205
12.2.6将多个元素或数组拼合成新的数组:concat207
12.2.7*数组的浅复制与深复制208
12.2.8排序:reverse、sort、sortOn211
12.3操作数组每个元素:forEach、every、 filter、map、some214
12.3.15个方法的共同点214
12.3.2回调函数215
12.3.3代码示例215
12.4本章小结217
第13章字符串:String219
13.1CHAR在那里219
13.2在ActionScript 3中如何针对字符操作220
13.2.1运用charAt()和char CodeAt()220
13.2.2运用fromCharCode()221
13.3字符串是不变对象(immutable object)222
13.4ActionScript 3中的StringBuilder在哪里223
13.5+、+=及<、<=、>、>=在字符串操作中的重载223
13.5.1在ActionScript 3 中运算符的重载:+和+=的重载224
13.5.2关系运算符(<、<=、>、>=)的重载224
13.6常用的字符串操作225
13.6.1indexOf()的使用及与search()的区别225
13.6.2substring()、slice()和substr()的使用及区别226
13.6.3split()与正则表达式结合运用227
13.6.4如何一次性输入多行文本227
13.7实用的mx.utils.StringUtil工具类228
13.8本章小结229
第14章强大的正则表达式:RegExp231
14.1什么是正则表达式?231
14.2ActionScript 3 中的正则表达式232
14.2.1第一个正则表达式例子232
14.2.2正则表达式的两个构成部分233
14.2.3ActionScript 3中正则表达式的工作机制233
14.3正则表达式语法234
14.3.1正则表达式中的文字符号234
14.3.2正则表达式中的字符集236
14.3.3特殊的点号(.)238
14.3.4选择符239
14.3.5括号与分组240
14.3.6用正则表达式描述字符串的重复240
14.3.7注意正则表达式的贪婪性和懒惰性241
14.3.8用正则表达式来定位242
14.3.9正则表达式的5个标志位243
14.3.10正则表达式元字符优先级243
14.4正则表达式与字符串的结合使用详解244
14.4.1RegExp类的exec() 和 test()244
14.4.2String类的search()和match()244
14.4.3String类的replace()与正则表达式向后引用245
14.5常用的正则表达式246
14.5.1文本处理和输入限制常用正则表达式246
14.5.2网络和HTML代码方面的应用246
14.5.3表单验证247
14.5.4匹配数字248
14.6本章小结248
第15章XML数据处理249
15.1XML的概览249
15.2XML简要介绍250
15.2.1一个简单的XML示例250
15.2.2XML简明语法251
15.2.3如何编写一个结构优秀的XML253
15.3XML在ActionScript 3中的地位254
15.3.1E4X:更好的XML处理规范标准255
15.3.2ActionScript 2程序移植时,关于XML部分该如何处理255
15.4创建XML对象256
15.4.1使用构造函数创建XML对象256
15.4.2直接使用XML文本创建XML对象256
15.5使用运算符操作 XML数据257
15.5.1使用“.”与“@”直接访问、修改、创建和删除XML对象258
15.5.2使用“.”与“@”直接修改XML对象259
15.5.3使用“.”与“@”直接添加和删除子元素和属性260
15.5.4简单方便地搜索XML子元素和属性261
15.5.5*使用正则表达式或自定义函数搜索XML子元素和属性263
15.6用API实现的一些常用XML操作264
15.7*XML的命名空间265
15.8XML对象与XMLlist对象268
15.9本章小结268
第16章异常和错误的捕捉与处理269
16.1什么是异常和错误269
16.1.1一个简单的异常例子270
16.1.2异常的概念和在ActionScript 3中的实现271
16.1.3使用异常处理机制的好处272
16.2使用try-catch-finally处理异常272
16.2.1try273
16.2.2catch274
16.2.3finally274
16.2.4try-catch-finally的语法规则274
16.3使用throw抛出异常275
16.4自定义异常277
16.5ActionScript 3中异常的层次和结构279
16.6处理异常的原则和方式280
16.6.1三大提倡281
16.6.2三大忌讳281
16.7对异常事件的处理282
16.8本章小结283
第4部分 ActionScript 3主要的 Flash Player API
第17章ActionScript 3目前主要的API概览287
17.1ActionScript 3的API总览287
17.2Flash Player API架构和介绍288
17.3Flash CS3提供的API介绍288
17.4*第三方类库提供的API289
17.4.1Adobe官方提供的产品之外的类库289
17.4.2ActionScript 3 的3D应用290
17.4.3开源项目资源290
17.5本章小结290
第18章事件发送和处理291
18.1事件(Event)处理机制的产生和原理292
18.1.1示意图:点菜的例子292
18.1.2DOM3事件的执行流程293
18.1.3第一个事件处理代码例子294
18.2ActionScript 3事件机制的新特色296
18.2.1回顾ActionScript 1和ActionScript 2中的事件机制296
18.2.2ActionScript 3 事件处理机制形式上的不同297
18.2.3新特色:事件流机制与视图元件的紧密结合297
18.2.4新特色:侦听器优先级298
18.2.5新特色:侦听器弱引用298
18.3事件298
18.3.1Event类的属性299
18.3.2Event类的构造函数299
18.3.3Event类的方法300
18.3.4自定义事件类300
18.4侦听器302
18.4.1创建侦听器303
18.4.2侦听器中的this关键字303
18.4.3注册侦听器和移除侦听器303
18.4.4检测事件侦听器303
18.4.5*事件的优先级304
18.4.6*事件的弱引用304
18.5自定义类发送事件的3种方式305
18.5.1继承EventDispatcher类305
18.5.2复合EventDispatcher对象307
18.5.3*实现IEventDispatcher接口308
18.6本章小结310
第19章网络通信基础311
19.1ActionScript 3网络通信的流程311
19.1.1构建通信请求对象312
19.1.2发出数据请求313
19.1.3侦听器函数313
19.2读取3种数据格式的例子314
19.2.1读取文本格式数据314
19.2.2读取值对格式数据316
19.2.3读取二进制格式数据317
19.2.4监控加载进度319
19.3getURL()的继承人:navigateToURL()319
19.4提交数据的例子320
19.5简述安全模型321
19.5.1沙箱模型321
19.5.2跨域文件:crossdomain.xml322
19.5.3*授予脚本访问权限:Security.allowDomain()323
19.6本章小结324
第5部分 ActionScript 3视觉编程
第20章ActionScript 3视觉编程精要327
20.1什么是显示对象327
20.1.1ActionScript 3中显示对象等级结构328
20.1.2显示列表:显示对象模型329
20.2ActionScript 3中显示对象的种类330
20.2.1ActionScript 2中的MovieClip330
20.2.2ActionScript 3 显示对象种类划分:一个统一、两个层次331
20.3*显示对象类库架构332
20.3.1InteractiveObject类和非InteractiveObject类332
20.3.2容器类和非容器类333
20.3.3Sprite和MovieClip334
20.3.4*非Flash API的几个显示对象类334
20.4ActionScript 3视觉架构的优越性334
20.4.1更高效的渲染,更好的内存利用335
20.4.2自动化的深度管理335
20.4.3完整遍历显示列表335
20.4.4列表外的显示对象336
20.4.5更易于创建自定义的显示对象336
20.5本章小结336
第21章DisplayObject类与矢量图、位图337
21.1显示对象的一些基本概念337
21.1.1显示对象的可视属性列表338
21.1.2显示对象的其他属性339
21.2所有显示对象的抽象父类:DisplayObject类340
21.3矢量图340
21.3.1Graphics对象341
21.3.2绘制矢量图的例子342
21.4位图342
21.4.1位图和像素342
21.4.2Bitmap和BitmapData343
21.4.3使用BitmapData创建和改变位图343
21.5遮罩345
21.5.1定义普通遮罩345
21.5.2定义Alpha通道遮罩346
21.6文本348
21.6.1创建文本348
21.6.2捕获HTML文本超链接的信息348
21.6.3在文本框中追加文本请使用高效率的appendText()350
21.7碰撞检测351
21.8自定义显示对象类352
21.9本章小结353
第22章容器:DisplayObjectContainer与Sprite、MovieClip355
22.1容器的概念和实现355
22.1.1DisplayObjectContainer类356
22.1.2最轻量的容器:Sprite类356
22.1.3一个自定义容器类的例子357
22.2添加、删除视觉元件358
22.2.1Flash程序中所有显示对象的添加流程358
22.2.2addChild方法、removeChild方法和contains方法359
22.2.3重要:添删显示对象的注意点359
22.3深度管理363
22.3.1深度的产生顺序和一个注意点363
22.3.2addChildAt和removeChildAt364
22.3.3交换不同深度的对象:swapChildren和swapChildrenAt365
22.3.4重设列表中已有对象的深度:setChildIndex365
22.3.5操作深度的具体代码例子366
22.4访问和遍历容器子显示对象367
22.4.13种访问方式的比较和选择368
22.4.2通过深度访问子显示对象368
22.4.3遍历容器的子显示对象370
22.4.4通过name访问显示对象372
22.4.5通过坐标访问显示对象372
22.5MovieClip(影片剪辑)374
22.5.1MovieClip的播放374
22.5.2为何在Flash创作工具中依然可以使用点号加影片实例名 访问子影片375
22.5.3未公开的API:方便实用的addFrameScript()376
22.6加载外部图像、SWF文件377
22.6.1加载SWF文件示例377
22.6.2域和安全性378
22.6.3AVM2的SWF文件与AVM1的SWF通信379
22.6.4访问被加载SWF文件的参数及访问网页传入的 参数(flashvars)379
22.7本章小结380
第23章Flash CS3:库元件的类绑定与Stage、文档类381
23.1类绑定的好处、原理和第一个例子382
23.1.1第一个类绑定的例子:自定义标签按钮382
23.1.2Flash创作工具中的类绑定385
23.1.3帧代码和类绑定的角色比较385
23.1.4绑定的选择:MovieClip子类和Sprite子类386
23.2如何在绑定类中访问影片内的子显示元件386
23.3绑定类中访问剪辑子元件的两种方法388
23.3.1手工声明public属性方法388
23.3.2自定义新属性方法390
23.43种不同的类绑定392
23.4.1自动生成的类绑定及用代码直接生成库元件对象392
23.4.2元件与独立的类绑定393
23.4.3让不同的库元件继承自共同的类394
23.5舞台与文档类396
23.6本章小结396
第24章显示编程与事件、人机交互397
24.1*事件的事件流(Event Flow)机制397
24.1.1事件流机制的3个阶段398
24.1.2事件currentTarget属性和target属性398
24.1.3*事件侦听时的事件流阶段399
24.1.4*事件都能冒泡吗?399
24.1.5说明事件流机制的例子399
24.2鼠标相关事件400
24.2.1鼠标事件对象的目标402
24.2.2单击和双击、鼠标按下和松开403
24.2.3鼠标悬停和鼠标移走405
24.2.4*用代码模拟鼠标输入407
24.3键盘相关事件409
24.3.1监听键盘输入的例子409
24.3.2全局监听键盘事件410
24.3.3Tab键与tabChildren410
24.4拖曳、鼠标跟随412
24.4.1拖曳412
24.4.2鼠标跟随413
24.5本章小结414
第25章ActionScript 3动画编程415
25.1动画编程原理415
25.1.1TimerEvent.TIMER和Event.ENTER_FRAME比较416
25.1.2Event.ENTER_FRAME事件与ActionScript 2中的onEnterFrame416
25.2代码绘制416
25.3改变显示对象属性418
25.4使用Timer类实现动画效果421
25.5借助fl.transitions包中的现有类创建动画代码422
25.5.1Tween类的多种用法423
25.5.2TransitionManager的用法424
25.6Flash 创作工具与动画编程的结合: Animator的运用425
25.6.1原理:Motion XML的构造和Animator的使用425
25.6.2具体演示和代码实例428
25.6.3Animator使用技巧和资源431
25.7本章小结432
第26章*Flash创作工具和Flex协作开发组件433
26.1浅谈Flash CS3组件与类绑定的剪辑元件433
26.2Flex组件与Flash CS3创作内容如何结合434
26.2.1Flex组件架构对显示对象的要求434
26.2.2Flex Component Kit for Flash CS3的安装和使用434
26.2.3Flash CS3和Flex的桥梁:UIMovieClip435
26.3如何开发UIMovieClip组件435
26.4一个纯代码UIMovieClip组件的例子435
26.5本章小结438
结束语 439
附录A 441
A.1 常用字符的ASCII码表441
A.2 书中代码示例索引441
参考文献 447
前言
ActionScript 3与RIA时代的到来
具有高度互动性、丰富用户体验及功能强大的客户端,是目前网络开发的迫切需求。Adobe公司的Flash Player凭借其全球97%的桌面电脑占有率和跨平台的优势,成为了事实上的下一代的RIA(Rich Internet Application,丰富因特网程序)主力。Adobe公司于2006年年中推出了强大的ActionScript 3 语言,和支持ActionScript 3 的新一代的虚拟机AVM 2。经测试,AVM 2执行ActionScript 3代码比以前的ActionScript 2 代码执行效率要快10倍以上。
ActionScript 3,与ActionScript 2和1有本质上的不同,是一门功能强大的、面向对象的、具有业界标准素质的编程语言。它是 Flash Player 运行时功能发展中的重要里程碑。ActionScript 3是快速构建Rich Internet Application的理想语言。
由于Adobe的Flex和Flash的成功,在业界已经掀起了RIA应用新浪潮!雅虎(Yahoo!)、eBay、Google都相继推出基于ActionScript的RIA应用程序和ActionScript API库。著名的应用案例有Yahoo Maps、eBay AIR拍卖程序、Google Analytics和Google Finance、微软的Wallop社区,等等。
ActionScript 3 有以下优势:
对面向对象编程(OOP)语言的完全支持。核心语言基于ECMAScript(ECMA 262)标准,对OOP架构深层优化。
彻底更新的显示对象系统架构。
采用了先进的E4X,使XML成为ActionScript 3 语言的内建数据类型(native support)。操作直白、简单。与ActionScript 2比较,极大地减轻了XML数据处理工作量。
全面支持正则表达式。正则表达式也成了ActionScript 3的内建数据类型,ActionScript 3对字符串的处理能力空前增强。
标准的DOM 3事件实现。Flash API全面支持事件机制。
异常处理机制。 异常包括信息全面、易于调试和处理。Flash API全面支持异常处理机制。
此外,ActionScript 3 积极迈向开源,赢得开源社区的欢迎。包括AVM 2虚拟机开源 ,源码赠送与Mozilla的Tamarin项目。Tamarin项目的开源,意味着ActionScript 3 虚拟机的开源。从而ActionScript 3 也将成为智慧无穷的开源社区的首选!
2007年6月11日推出了Adobe Intergrated Runtime(AIR) Beta版,正式实现新一代的RIA概念——跨系统运行时(cross-operating system)的RIA程序。首次允许RIA程序访问本地资源,并进行离线存储,跳出了浏览器的限制,模糊了浏览器和桌面程序的界限,在线和离线的界限。AIR具有革命性的前瞻视角,被业界誉为RIA的第二次革命。而ActionScript 3就是用于开发AIR程序的主要核心语言。
ActionScript 3的时代已经到来!我们正在迎接它的辉煌!
本书的目标与特色
本书目标
ActionScript 开发界缺少一本真正的以面向对象思想来讲解的书籍,缺少从ActionScript 3语言架构上来分析的书籍。无论国内还是国外目前都缺少这样一本书。很多ActionScript 开发人员都只停留在知道OOP语法、会熟练运用ActionScript 3 提供的类库API阶段,而对OOP思想和ActionScript 3 整个系统架构脉络一知半解。买椟还珠,这是很可惜的。
本书尝试以系统架构师的眼光,以面向对象思想为主轴,讲述ActionScript 3中面向对象的精髓和应用。从ActionScript 3 系统架构的高度,清楚明白地讲解ActionScript 3的API设计原因、原理和应用。
面向对象思想和ActionScript 3系统架构就是RIA开发的任督二脉,打通之后,你就会觉得所有ActionScript 3知识都是共通共融、浑然一体的,从而再学习广阔的ActionScript 3开源世界中的其他东西时,也会觉得高屋建瓴、势如破竹 、轻松如意。
在本书中,对于ActionScript 3中的面向对象讲解的广度和深度都远超过目前所有书籍。从广度上说,涵盖了OOP语法、重要API的运用、核心类包的结构……从深度上说,详细地解释了面向对象实现上的重大变化和实现细节,透彻地阐述了新一代的显示编程架构及应用。比如 ActionScript 3的几大新特色、重要的OOP法则、ActionScript 3语言本身在哪些地方使用了设计模式。从实用上说,每一个重要的应用都有实际的代码例子相结合,例如,有类绑定的种种实际做法和UIMovieClip类与Flex结合应用等。本书不仅仅介绍相关语法和运用,更重要的是解释如何设计与怎样使用。
本书希望把你真正带往ActionScript 3编程的殿堂。
本书特色
本书是一本“面向原因式”的书籍(Why-Oriented Book)。让你对所有细节的设计用意和原因清清楚楚。
以ActionScript 3 语言设计的本意和思路,深浅结合,讲解各个部分。尽可能使读者在了解ActionScript 3 语言的同时,更好地把握ActionScript 3 语言的思想。
重视实际运用,例子丰富。不算文中代码片段,仅完整类文件就近两百个,为编程提供实际的指导。本书在撰写所有部分时,力求达到两点:与实际的代码例子结合;讲述ActionScript 3 语言关于该部分的内部实现和技术细节。
以面向对象思想(OOP)为重点,例子和比喻结合。系统讲述了OOP思想及其在ActionScript 3 中的运用。并结合ActionScript 3本身的语言架构加以详细的分析。
横向比较其他优秀OOP语言。本书中有大量涉及到ActionScript 3和Java、C#等语言相比较的地方,使得已有其他OOP语言基础的读者可以快速了解ActionScript 3的独特之处,快速上手。
清楚地阐述ActionScript 2和ActionScript 3的不同及原因。对于ActionScript 3 大部分相对于ActionScript 2 的改动,本书不但一一指出,还从理论上解释为何改变,以及相关的实现,使ActionScript 2 程序员快速上手ActionScript 3 ,并对ActionScript 2代码移植有相当大的帮助。
本书为何而写
长时间以来,国内ActionScript 方面的书籍总是落后国外同类书籍一年到两年,很大程度上影响了ActionScript 在国内的推广和国内爱好者水平的提高。本书作者从事大型ActionScript 2 RIA项目开发已有数年经验,在Flash Player 8.5出现、ActionScript 3推出测试版开始,就已开始研究其架构,积累了丰富的第一手开发笔记。因此,本书的写作与国际ActionScript 3的研究发展是完全同步的。
笔者在电子工业出版社的大力协助下,以严谨的学术态度撰写本书。笔者衷心期望,本书出版时,不仅是国内ActionScript 界第一本与国际同步的书籍,也能抛砖引玉,加速推动国内ActionScript 3 的研究开发步伐。
本书为谁而写
本书所讲的知识用于Flash、Flex下的ActionScript 3应用程序开发。本书的读者应具有基本的编程知识(不限语言),至少应理解变量、循环、函数等基本编程概念。
写一本从ActionScript 3 初学者、ActionScript 3 中级爱好者到其他OOP语言(如C#、 Java)开发者都能看的书,是一件很有野心的事,事实上也难以完全做到。
但据笔者观察,国内ActionScript 爱好者水平参差不齐。有部分ActionScript 2 高手,但更多的是ActionScript 2 或1中级爱好者,以及准备从Flash Designer(Flash设计)转向ActionScript 3 的新手。更有广大的其他OOP语言的读者,比如C#、 Java等,拥有良好的OOP基础,准备转向ActionScript 3 。随着RIA革命的到来,未来还有更多的、潜在的ActionScript 爱好者。
这样的现状促使我向这个不可能的任务做一些力所能及的努力。经过分析,这几个群体有比较明显的特征,使得我可以在讲述的同时有所侧重,择善结合。
对初学者
你可能喜欢比较浅显的比喻和详细的讲解。有时告诉你原因,比简单罗列代码告诉你怎么做,可以更快让你理解根本,进入状态。本书正是这样一本Why-Oriented Book。本书与其他书的一个最大不同就是“面向原因”(Why-Oriented Book)的讲述方式,让你对每部分内容的由来清清楚楚。
如果你对ActionScript 一点都不熟,那么恭喜你,你赶上好时候了。ActionScript 3 比以往的ActionScript 2或ActionScript 1要好学很多,好记很多。原因就是ActionScript 3 的结构更加标准和统一。不信,举个小例子,在ActionScript 2 中创建一个视觉元件的实例有 attachMovie()、createChildAtDepth()、createClassObject()……等八九种方法,每种方法都有自己的参数,而且要手动管理元件深度。而在ActionScript 3 中,一切都统一为new 元件名()就可以了。深度统一且自动管理。这样的改进实在太多了!
所以抛开相对混乱的ActionScript 1和ActionScript 2,放心大胆地学习ActionScript 3吧。能直接学习ActionScript 3,绝对是新手的福气!
对于ActionScript 中级爱好者
你往往具有一定水平和能力,ActionScript 2各个方面都有涉猎,但都不深。你需要有针对性的细节点拨和思路指导。你往往不喜欢婆婆妈妈的讲解,最喜爱具体的代码例子。但往往对自己掌握的程度估计不足,对自己知道的东西不加以深究,和高手的差距就在这里。本书用章节“*”号(有相当数量)和进阶知识这两个部分来针对这个群体。
众所周知,知识的讲解应当是一个整体,不能每个知识点都有初级、中级、高级之分。你清楚的东西,对你而言就是初级。你不清楚的东西,往往就是高级。你知道并了解,但是不知道细节的东西,那就是中级。因此对于中级爱好者,我建议,在你快速翻完了本书所有“*”号和进阶知识之后,有空时你最好从头详细读一下其他章节。我相信,你绝对不虚此“读”。很多有用的知识点和ActionScript 3 技术上的实现细节,你可能还不清楚。举个小例子,比如,“加Label的continue、break的用法”,不少读者可能就不太清楚。
加油,高手的称号指日可待!
ActionScript高级爱好者
你有一定的开发经验和知识水平,知道很多ActionScript 2 细节。但是ActionScript 2 和ActionScript 3 区别如此之大,你会感觉到有点沮丧。但,沮丧不久,你就会被ActionScript 3 标准的架构、优雅的实现和无限的潜能所吸引。
你甚至发现ActionScript 3 其实比ActionScript 1、ActionScript 2要好学很多 ,好记很多。再过不了多久,你会发现ActionScript 3 是如此好用,如此方便,如此先进,以致于不可能再转回ActionScript 2了。这时候就逼你的老板用ActionScript 3开发产品吧。It’s your time。
本书中有大量地方标注了和ActionScript 2不同的地方,可以让你快速地进入ActionScript 3的工作状态。并且提供了很多ActionScript 3中独有的技术细节和小技巧,为你日后的开发扫清很多小地雷。
对C#、Java爱好者和开发者
恭喜你,其实ActionScript 3 比它前辈的任何一个版本都接近C#、Java这两种语言。你学习ActionScript 3 ,将是真正的事半功倍。
你真正想要知道的是,ActionScript 3和C#、Java有哪些不同点?ActionScript 3 编程有哪些部分需要重点学习?API有哪些不同,哪些是重点?在ActionScript 3中哪些细节需要注意?
在本书中对大部分涉及到语言差异的地方都做了标注。你要做的是,看一下每章前面的导读,抓住重点,快速浏览章节。融会贯通这些基本的不同点之后,重点掌握ActionScript 3视觉编程部分和熟悉一些关键的API。当然,我特别建议你有空时能从头详细读一遍本书,很多ActionScript 3 独有的技术细节和小技巧可能是你需要了解的。
你会发现, ActionScript 3 编程是这么的方便和美妙!ActionScript 3 这个标准的OOP语言,用起来是这么熟悉和顺手!和Flash合作编出的界面是这么漂亮优雅,易于拓展!强烈推荐你花点时间看一看第1章。
本书结构
第1部分:ActionScript 3语言基础
第2部分:ActionScript 3 面向对象编程
第3部分:ActionScript 3 核心类
第4部分:ActionScript 3主要的Flash Player API
第5部分:ActionScript 3视觉编程
如何使用本书
本书建议按照章节顺序阅读。初级爱好者读到带“*”号的章节时,如有不明白的地方可以暂时跳过,以后有时间时回头再读。每章都有“本章导读”,读者可根据具体的“章节导读”来进行阅读。
另外,本书提供了详细的章节目录、代码例子目录、表格目录等,也可以作为ActionScript 3 简要的工具书使用。在本书中,对类名、变量、代码、术语和重点句都特别用了样式来标明。
著 者
更多图书资讯可访问读书人网图书频道:http://www.reader8.com/book/