第1部分 ActionScript 3语言基础
第1章 ActionScript 3语言介绍与开发环境 3
1.1 ActionScript 3介绍 3
1.1.1 ActionScript发展历史简述 4
1.1.2 Flash Player 9和AVM 2 5
1.1.3 Macromedia和Adobe的合并 6
1.1.4 ActionScript 3与开源世界 6
1.2 ActionScript 3的特色 6
1.2.1 核心语言新特色 7
1.2.2 Flash Player API 功能的新特色 8
1.3 ActionScript 3 程序开发工具 9
1.3.1 Flash CS3 9
1.3.2 Flex 2 、Flex 3及Flex SDK 9
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.1 ActionScript 3中数据的本质及重要性质 15
2.1.1 *一切都是对象(Object) 15
2.1.2 ActionScript 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 布尔值:Boolean 24
2.4.2 数字:int、uint、Number 24
2.4.3 重要:使用int、uint、Number应当注意的事项 25
2.4.4 字符串:String 28
2.4.5 数组:Array 29
2.4.6 Object及关联数组 30
2.4.7 多维数组 32
2.4.8 Null、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.11 typeof、is、as 41
2.5.12 *in 42
2.5.13 delete:ActionScript 3中的作用变了 42
2.5.14 优先级顺序 43
2.6 ActionScript 3的保留字 43
2.7 本章小结 44
第3章 ActionScript 3流程控制 45
3.1 什么是面向过程?看一个找书的例子 45
3.2 true和false:条件表达式的结果 47
3.3 if-else 47
3.3.1 最常用的if和if…else 47
3.3.2 if…else if … else的用法和注意点 48
3.4 循环 49
3.4.1 循环的三要素 49
3.4.2 while 50
3.4.3 do-while 50
3.4.4 for 51
3.4.5 * for…in 和for each…in 52
3.4.6 break和continue的简单用法 53
3.4.7 *控制嵌套循环的流程:break 和continue的标签用法 54
3.5 switch 57
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.2 Class(类)和Object(对象) 79
5.2.1 Class和Object的权威定义 80
5.2.2 Class和Object的区别 81
5.3 Class的成员 81
5.4 Class和Object的创建和使用 82
5.4.1 创建Class 82
5.4.2 创建类的实例 83
5.5 Class和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:使用静态属性部分实现Enumeration 91
5.7.6 应用3:实现工具类 92
5.8 构造函数 93
5.8.1 构造函数实例 94
5.8.2 构造函数只能使用public访问控制 95
5.8.3 构造函数的返回类型 95
5.9 Class的种类:动态类和密封类 96
5.10 this关键字 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.3 ActionScript 3中封装的几个层次 108
6.4 package(包) 109
6.4.1 包的导入(import) 109
6.4.2 使用Import避免命名冲突 111
6.4.3 package的创建和命名 112
6.5 *原理:编译器如何导入package 113
6.5.1 类路径 114
6.5.2 编译器导入package的顺序 114
6.6 类成员的访问控制 115
6.6.1 Internal:包内访问 115
6.6.2 public:完全公开 118
6.6.3 private:仅当前类可访问 118
6.6.4 protected:子类可访问 120
6.7 Getter和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 系统如何生成命名空间的默认uri 133
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、internal 141
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 何时使用final 158
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.1 ActionScript 3中核心类和函数的变化及原因 196
11.2 核心类的数目和列表 196
11.3 核心类和函数的作用和地位 198
11.4 本章小结 198
第12章 数组:Array 199
12.1 数组(Array)的介绍 199
12.1.1 访问数组元素 199
12.1.2 数组的长度 200
12.1.3 多维数组 201
12.2 数组(Array)的基本操作 201
12.2.1 查找:indexOf、lastIndexOf 201
12.2.2 在数组首尾新增元素:push、unshift 202
12.2.3 删除数组首尾元素:pop、shift 203
12.2.4 在数组当中插入或者删除元素:灵活多变的splice 204
12.2.5 获取数组中的部分元素:slice 205
12.2.6 将多个元素或数组拼合成新的数组:concat 207
12.2.7 *数组的浅复制与深复制 208
12.2.8 排序:reverse、sort、sortOn 211
12.3 操作数组每个元素:forEach、every、 filter、map、some 214
12.3.1 5个方法的共同点 214
12.3.2 回调函数 215
12.3.3 代码示例 215
12.4 本章小结 217
第13章 字符串:String 219
13.1 CHAR在那里 219
13.2 在ActionScript 3中如何针对字符操作 220
13.2.1 运用charAt()和char CodeAt() 220
13.2.2 运用fromCharCode() 221
13.3 字符串是不变对象(immutable object) 222
13.4 ActionScript 3中的StringBuilder在哪里 223
13.5 +、+=及<、<=、>、>=在字符串操作中的重载 223
13.5.1 在ActionScript 3 中运算符的重载:+和+=的重载 224
13.5.2 关系运算符(<、<=、>、>=)的重载 224
13.6 常用的字符串操作 225
13.6.1 indexOf()的使用及与search()的区别 225
13.6.2 substring()、slice()和substr()的使用及区别 226
13.6.3 split()与正则表达式结合运用 227
13.6.4 如何一次性输入多行文本 227
13.7 实用的mx.utils.StringUtil工具类 228
13.8 本章小结 229
第14章 强大的正则表达式:RegExp 231
14.1 什么是正则表达式? 231
14.2 ActionScript 3 中的正则表达式 232
14.2.1 第一个正则表达式例子 232
14.2.2 正则表达式的两个构成部分 233
14.2.3 ActionScript 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.1 RegExp类的exec() 和 test() 244
14.4.2 String类的search()和match() 244
14.4.3 String类的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.1 XML的概览 249
15.2 XML简要介绍 250
15.2.1 一个简单的XML示例 250
15.2.2 XML简明语法 251
15.2.3 如何编写一个结构优秀的XML 253
15.3 XML在ActionScript 3中的地位 254
15.3.1 E4X:更好的XML处理规范标准 255
15.3.2 ActionScript 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.8 XML对象与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.1 try 273
16.2.2 catch 274
16.2.3 finally 274
16.2.4 try-catch-finally的语法规则 274
16.3 使用throw抛出异常 275
16.4 自定义异常 277
16.5 ActionScript 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.1 ActionScript 3的API总览 287
17.2 Flash Player API架构和介绍 288
17.3 Flash CS3提供的API介绍 288
17.4 *第三方类库提供的API 289
17.4.1 Adobe官方提供的产品之外的类库 289
17.4.2 ActionScript 3 的3D应用 290
17.4.3 开源项目资源 290
17.5 本章小结 290
第18章 事件发送和处理 291
18.1 事件(Event)处理机制的产生和原理 292
18.1.1 示意图:点菜的例子 292
18.1.2 DOM3事件的执行流程 293
18.1.3 第一个事件处理代码例子 294
18.2 ActionScript 3事件机制的新特色 296
18.2.1 回顾ActionScript 1和ActionScript 2中的事件机制 296
18.2.2 ActionScript 3 事件处理机制形式上的不同 297
18.2.3 新特色:事件流机制与视图元件的紧密结合 297
18.2.4 新特色:侦听器优先级 298
18.2.5 新特色:侦听器弱引用 298
18.3 事件 298
18.3.1 Event类的属性 299
18.3.2 Event类的构造函数 299
18.3.3 Event类的方法 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.1 ActionScript 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.3 getURL()的继承人:navigateToURL() 319
19.4 提交数据的例子 320
19.5 简述安全模型 321
19.5.1 沙箱模型 321
19.5.2 跨域文件:crossdomain.xml 322
19.5.3 *授予脚本访问权限:Security.allowDomain() 323
19.6 本章小结 324
第5部分 ActionScript 3视觉编程
第20章 ActionScript 3视觉编程精要 327
20.1 什么是显示对象 327
20.1.1 ActionScript 3中显示对象等级结构 328
20.1.2 显示列表:显示对象模型 329
20.2 ActionScript 3中显示对象的种类 330
20.2.1 ActionScript 2中的MovieClip 330
20.2.2 ActionScript 3 显示对象种类划分:一个统一、两个层次 331
20.3 *显示对象类库架构 332
20.3.1 InteractiveObject类和非InteractiveObject类 332
20.3.2 容器类和非容器类 333
20.3.3 Sprite和MovieClip 334
20.3.4 *非Flash API的几个显示对象类 334
20.4 ActionScript 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.1 Graphics对象 341
21.3.2 绘制矢量图的例子 342
21.4 位图 342
21.4.1 位图和像素 342
21.4.2 Bitmap和BitmapData 343
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、MovieClip 355
22.1 容器的概念和实现 355
22.1.1 DisplayObjectContainer类 356
22.1.2 最轻量的容器:Sprite类 356
22.1.3 一个自定义容器类的例子 357
22.2 添加、删除视觉元件 358
22.2.1 Flash程序中所有显示对象的添加流程 358
22.2.2 addChild方法、removeChild方法和contains方法 359
22.2.3 重要:添删显示对象的注意点 359
22.3 深度管理 363
22.3.1 深度的产生顺序和一个注意点 363
22.3.2 addChildAt和removeChildAt 364
22.3.3 交换不同深度的对象:swapChildren和swapChildrenAt 365
22.3.4 重设列表中已有对象的深度:setChildIndex 365
22.3.5 操作深度的具体代码例子 366
22.4 访问和遍历容器子显示对象 367
22.4.1 3种访问方式的比较和选择 368
22.4.2 通过深度访问子显示对象 368
22.4.3 遍历容器的子显示对象 370
22.4.4 通过name访问显示对象 372
22.4.5 通过坐标访问显示对象 372
22.5 MovieClip(影片剪辑) 374
22.5.1 MovieClip的播放 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.3 AVM2的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.2 Flash创作工具中的类绑定 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.4 3种不同的类绑定 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.3 Tab键与tabChildren 410
24.4 拖曳、鼠标跟随 412
24.4.1 拖曳 412
24.4.2 鼠标跟随 413
24.5 本章小结 414
第25章 ActionScript 3动画编程 415
25.1 动画编程原理 415
25.1.1 TimerEvent.TIMER和Event.ENTER_FRAME比较 416
25.1.2 Event.ENTER_FRAME事件与ActionScript 2中的onEnterFrame 416
25.2 代码绘制 416
25.3 改变显示对象属性 418
25.4 使用Timer类实现动画效果 421
25.5 借助fl.transitions包中的现有类创建动画代码 422
25.5.1 Tween类的多种用法 423
25.5.2 TransitionManager的用法 424
25.6 Flash 创作工具与动画编程的结合: Animator的运用 425
25.6.1 原理:Motion XML的构造和Animator的使用 425
25.6.2 具体演示和代码实例 428
25.6.3 Animator使用技巧和资源 431
25.7 本章小结 432
第26章 *Flash创作工具和Flex协作开发组件 433
26.1 浅谈Flash CS3组件与类绑定的剪辑元件 433
26.2 Flex组件与Flash CS3创作内容如何结合 434
26.2.1 Flex组件架构对显示对象的要求 434
26.2.2 Flex Component Kit for Flash CS3的安装和使用 434
26.2.3 Flash CS3和Flex的桥梁:UIMovieClip 435
26.3 如何开发UIMovieClip组件 435
26.4 一个纯代码UIMovieClip组件的例子 435
26.5 本章小结 438
结束语 439
附录A 441
A.1 常用字符的ASCII码表 441
A.2 书中代码示例索引 441
参考文献 447