ActionScript的特征
1. 运行时,能识别出动态类型转换的错误
2. 异常处理机制
3. 正则表达式
4. 新的primitive type: Number(double和float精度数字),int(32位整数), unit(32位无符号整数,用于RGBcolor,字节数)
面向对象语法
只记录了与java不一样的地方
类有四种修饰符public ,internal(类似于friendly) dynamic(后期可添加函数,比较少用)和final
在As文件中,package中只能 有一个类,不在package中的类为从属类,不能为外部访问
子类不能定义父类中已存在的非private属性,会提示编译错误。覆盖父类方法,前面加上override,调用父类被覆盖方法:super.fun()
接口中不能定义变量或常量,只能定义方法,而且方法没有修饰符,实现类中方法声明为public
var top:* 表示top变量类型不确定
数据类型
Primitive类型: Boolean int Null Number String unit void
int代表32位有符号的证书,unit为无符号的32位整数, Number为64位浮点数。选择原则:如果只处理整数,优先选择int和颜色相关的选择unit,有可能是小数的使用Number,int发生溢出的整数也使用Number。使用unit要保证其不小于0.
复合数据类型:Object Array Date Error Function RegExp XML XMLList
数字计算除了 + - * / %,还有Math类
定义数组 var typeArray:Array=[],可以为数组指定排序规则和方向,如 nums.sort(Array.NUMERIC|Array.DESCENDING), sortON可以对多维数组或集合元素为对象进行排序 students.sortOn(“age”,Array.NUMERIC)
类型监测和转换: 监测 对象 is 类型 强制转换 类型(对象名)
常量使用const定义 : public const STR:String="abc";
XML类型,变量名或id代表根节点,使用时应该是 id.nodes而不是id.root.nodes。对于从多个节点得到数组要指定到节点本身,而不是其父节点
控制程序流程
Switch(条件表达式) 可以为任意类型,只要值和case相同
循环 for( in ) 对数组和对象循环,循环变量为序号; for each( in ) 对数组和对象循环,循环变量为值
Break在多重循环中,只跳出一从循环,同java中
基本内容
类型运算: typeof 19 以字符串形式返回类型名; 19 is Number 判断是否为所属类型; 19 as int 转换为int类型,失败时返回null int(10)也能转换类型,当失败时抛出异常
ActionScript的函数
AVM1和AVM2是不同SWF版本的虚拟机,两者之间如果要通信,需要调用 flash.net.LocalConnection进行
函数的默认值 function fun(s:String="abc"):void, 设定不等类型变量 var a:*
函数参数个数不定 function fun(...rest):void rest为一个数组,要访问参数,可以使用rest[i].
可以使用函数指针,如 var fun:Function=fun1 fun()进行调用。可实现1)根据不同条件调用不同函数 2)使用Array和函数对象实现函数队列。
枚举的实现(几个相关联的状态): final class StateEnum { public static const STATE1:String}
没用过的组件
Application ControlBar可以作为工具栏
Application中,当layout为absolute时,horizontalAlign和VerticalAlign不起作用。
属性: paddingLeft/Right/Bottom/Top 代表上下左右的边距, x和y代表左上角的位置和width,height完成定位; top和left完成定位
Panel: 使用ControlBar在Panel底部实现按钮组
实现Tab有两种方式,TabNavigator和TabBar+ViewStack实现。TabBar可以和任何组件一起使用,而不仅限于容器组件
多个RadioButton通过指定groupName成为一组
ButtonBar:当不需要记录用户状态时,而ToggleButtonBar会在按钮组显示当前状态。
加载外部内容: Image加载图片; swf loader加载swf文件和图片 videoDisplay播放flv视频文件
第7章: 命名空间
命名空间相当于类的静态属性,为程序提供语境描述,如电话::打(), 球类:打()
命名空间的使用:
1. 定义命名空间,当希望namespace被不同包内的类访问时,可将其定义到独立的as中,在as中public namespace mx_internal; 当希望在一个类中使用命名空间切换不同版本的方法和属性,该命名空间可在类中定义。定义格式相同。
2. 应用命名空间,如 mx_internal function (即将public替换) 如果该命名空间在类外定义,则需要在类定义前加上 use namespace mx_internal,如:
Package A {
Use namespace mx_internal;
Public class Foo
}
3. 引用命名空间,在要用到的地方 A.mx_internal::fun();
复合和继承,抽象类和接口
类成员有四种修饰符: public internal dynamic(实现运行时添加类和属性的方法 dynamic class Foo)和final。 类成员可以有:public ,private, internal, protected
as文件的组织结构: package 中包含一个和文件名相同的public类,在package外有几个不是public的类,作为辅助类
Composition中双方对象同时创建,同时消亡,即“同生共死”;Aggregation中被聚合和聚合对象独立存在,即“各安天命”
子类不能继承父类静态成员,但可以调用,如Base.Hello();
抽象类:在as中没有abstract关键字,需要将类命名为以Abstract开头,提醒自己不要实例化;此外如果子类都在同一模块中,将父类的访问控制设为internal;如果父类和子类都对外部可见,当要将抽象类实例化时自动抛出异常。
子类不能定义父类存在的非private属性,重载函数前需要有override,调用父类覆盖方法 super.fun()
接口不可以定义变量和常量,只能定义方法,并且方法不能有修饰符。实现类中方法声明为public
ActionScript的核心类和全局函数
常用核心类:
Math(用于数学运算)
异常类: Error ArgumentError DefinitionError EvalError RangeError ReferenceError SecurityError SyntaxError TypeError URIError verifyError
全局函数:
URL编码解码工具 decodeURI encodeURI
URL格式解码编码 escape unescape
判值函数 isFinite(是否无穷大) isNaN(是否数字) isXMLName
字符串转为数字 parseFloat parseInt
数组
数组的定义
var array:Array=[1,2,3], <mx:Array id="array">
多维数组,如var arr:Array=[[1,2,3],[4,5]] ,各维长度可以不同。
基本操作:
查找 indexOf lastIndexOf
在数组首尾增加 (push unshift), 删除(pop shift) 可以一次性增加多个元素
数组.push(元素1,元素2,元素3)
数组中加入或删除 splice 删除点索引可以为负数,表示从尾部倒数的位置
从某位置开始,删除指定数目元素,并插入新元素
数组.splice(删除点的索引,要删除的元素数目,新元素1,新元素2);
删除某位置后的元素
数组.splice(删除点的索引,要删除的元素数目)
某位置后插入新的元素
数组.splice(删除点索引,0, 新元素1,新元素2)
获取部分元素 slice(不改变原数组内容)
将多个元素或数组拼成新的数组 concate
数组拷贝:
浅拷贝 Array.slice()
深拷贝 var fooA:ByteArray()=new ByteArray(); fooA.wirteObject(array1);
fooA.position=0; var bar:Array=fooA.readObject() as Array
逆序 reverse()
数组的排序
array.sort(标识)。标识有五种,可以组合使用,如Array.UNIQUESORT,DESCENDING,CaseInsensitive, returnIndexedArray,numeric。
sortOn(){对多维数组或元素对象排序} ,students.sortOn("age",Array.NUMERIC);
sort(比较函数),格式为 function 函数名(para1:类型,para2:类型):int 返回值为-1,1,0
操作数组每个元素
条件 | 说明 | 备注 |
遍历操作 | ForEach(callBack:Function,object:*=null):void | 对数组进行遍历,回调函数不返回值 |
过滤器 | Filter(callBack:Function,object:*=null):Array | 类似于apache.common中的select, 回调函数返回单个新数组元素 |
映射器 | Map(callBack:Function,object:*=null):Array | 类似于common中的transform,回调函数返回单个新数组元素 |
有一个满足为真 | Some(callBack:Function,object:*=null):Boolean | 只要有一个元素能让回调函数返回true,则some返回true,否则为false。回调函数返回单个元素比较结果 |
全部满足为真 | every(callBack:Function,object:*=null):Boolean | 必须所有元素能让回调函数返回true,则every返回true,否则为false。回调函数返回单个元素比较结果 |
回调函数格式 function 函数名(元素:类型,索引:int,数组对象:Array):返回值 {}
String
字符函数
charAt() charCodeAt() [返回unicode值] fromCharCode()
java中的StringBuilder酒使用+代替
运算符 + += < <= > >=(比较从左到右)
字符串操作
查找 indexOf lastIndexOf(参数为普通字符串) search(参数为正则表达式)
返回字串 substring和slice根据起点和终点来提取的, substr由起点和长度决定
分割字串 split(参数可以为正则表达式) var delimeter:RegExp=//d+/
匹配 match(参数可以为正则表达式)
替换 replace
大小写转换 toLowerCase toUpperCase
工具类 mx.utils.StringUtil
正则表达式的结合
Search() 返回第一次匹配的索引位置; match() 返回匹配的字符串,如有g,则返回匹配的字符串数组。 Replace 正则表达式进行查找替换
XML
数据结构
有大段文本,尤其是包含空格和特殊字符使用子元素,否则使用属性,减少层次
常用的数据类型:
XML: 只有一个根节点,支持实时修改和解析数据
Var xml:XML=<item text=’a’/>
在XML中可用已有变量直接构成XML,使用{}括起来
XMLList: 相当于xml的数组,没有太强大的API支持
XMLListCollection: 实现对XMLList的操作
修改运算
Item.toXMLString输出节点; item.toString输出text
只有xml可以修改,而xmllist会发生运行时错误
Item.@text=”b” 修改或新建属性
Item.child=new XML() //添加一空白子节点
Item.child=<item text=”b”/>
Item.child=”china” //新建子节点 <child>china</child>
Delete 删除子元素或属性
查询运算
.. 所有子元素
* king.site.@*.toXMLString() 查找site的所有属性
使用表达式
healths.floor.(@id==floor.@id)
使用正则表达式,即在查询表达式中使用match
King.site.(pageview.match(/^5\d+/)) 查找子元素文本为5开头数字的site元素
使用自定义函数
King.site.(check(pageview));
Function check(t:*):Boolean {} //t为传入的 xml或xmllist
网络通信
可使用URL Request读取文件,URLLoaderDataFormat.text为文本文件;URLLoaderDataFormat.variables为properties文件,在Complete中使用for遍历loader.data;URLLoaderDataFormat.binary为二进制文件, event.target.data as ByteArray
监控加载进度 ProgressEvent的两个属性 bytesLoader bytesTotal
打开网址,使用flash.net.navigateToURL
AS视觉编程
Stage是最根本的容器,包括当前swf,一个应用程序只能有一个
只有addChild加入的内容才会进行渲染
<mx:Image> 将图片显示出来,其source可以为url,或者为BitMap对象。 BitMap表示位图对象, BitMapData得到BitMap的像素信息,并通过函数 draw()可以完成形变处理。Shape为矢量图。Sprite为轻量级的容器,是首选。 MovieClip通常由flash创建工具绘制
所有的显示对象是UIComponent的子类或实现IUIComponent接口
DisplayObject类与矢量图、位图
DisplayObject的可视属性有 x,y,width,scalex,scaley(值为后来/原有的) mouseX mouseY(当前属性与(x,y)的距离) rotation(绕轴点顺时针旋转的角度)
Shape创建步骤:
Var circle:Shape=new Shape();
Circle.graphics.beginFill() //设置线头样式,填色
Circle.graphics.drawCircle //移动画图点,画线或绘制图形
Circle.graphics.endFill(); //结束填色
位图: Bitmap和BitmapData
遮罩: 普通遮罩和alpha通道遮罩 DisplayObject.setMask() 进行
文本:捕获带超链接的文本 TextField.htmlText=”” 字符串中的超链接必须以event:开头