2009 - 2010 Flex 工作笔记
2009 - 2010 Flex 工作笔记
2010年07月11日
1,关于事件监听target和currentTarget的区别=================================================
在一个容器里,只要给最外的容器增加监听事件,其内部的所有子显示对象都会被监听,
具体由哪个对象触发的可由target来区别。
target为触发该事件的对象
currentTarget为正在处理该事件的对象,一般为事件的注册addEventListener的对象。
2,坐标转换===========================================================================
obj.localToGlobal(point)//将显示坐标转为舞台坐标(或理解为:讲本地坐标转为应用程序级别的坐标)
obj.globalToLocal(point)
3,获取显示对象的显示所占的矩形
obj.getBound(container)//返回相对于container显示对象的矩形,包括笔触
getRect()//不包括笔触
4,flex内部缓动效果===================================================================
flex mx包中定义了一组缓动函数,放在mx.effect.easing包中
可通过设置效果(例如:Move)的easingFunction来获得不同的特效
Bounce反弹算法
Circular园算法
Cubic立方
Elastic弹簧
Exponential指数
Linear直线
Quadratic二次方
Quartic四次方
Quintic五次方
其中easeOut为减速函数,easeIn为加速函数
5,声音抽样播放 Sound.extract(ByteArray, 采样数最大为8192, ...)==================================
先Sound类或者Mp3FileReference第三方类加载外部Mp3
再new另一个Sound对象并做如下操作
var mysound:Sound = new sound();
mysound.play();
mysound.addEventListener(SampleDataEvent.SAMPLE_DATA,....);
然后再其监听函数里面,对载入的mp3进行采样 sound.extract();
再把采样数据写入监听事件的data属性中
event.data.writeFloat(ByteArray.readFloat());
event.data.writeFloat(ByteArray.readFloat());
(注:Mp3的样本由两个32位浮点数组成,所以要writeFloat两次)
6,Flash为Flex制作组件===============================================================
画好MC,并把要输出给Flex使用的子MC定义好实例名称,如果需要关联As3.0文件,则在到处为ActionScript导出时
选择关联的外部as文件,最后导出swc,并把swc导入flex lib文件夹下,就可以在flex里使用flash定义好的组件了。
7,NetStream播放flv文件的两种方式(本地,Red5服务器)===================================
使用NetStream播放flv文件时
如果构造函数传递的NetConnection连接的是null,那么NetStream play的文件是一个相对于应用程序的相对路径对应的
flv文件
如果NetConnection连接是Red5或者FMS,那么play中的文件是位于streams文件夹下的flv文件,且在下载过程中经Red5
服务器处理。
8,Flex AIR加载外部文件并写入磁盘======================================================
用URLLoader加载外部文件时,需要设置URLLoader.dataFormat属性,使得URLLoader知道加载的文件是二进制文件
普通文本文件还是变量文件(这点很重要)。
加载成功后,通过以下步骤写入磁盘
var file:File = new File(File.applicatoinDirecgtory.nativePath + "name");
var fileStream:FileStream = new FileStream();
fileSteram.open(file,FileMode.WRITE);
fileStream.wirteBytes(URLLoader.data);
fileStream.close();
9,Flex 的as代码与MXML代码分离=========================================================
创建继承于Flex类库的as类,在创建继承与该类的MXML组件,达到as代码和MXML分离。
10,Flex 元数据标签====================================================================
[Inspectable(defaultValue="",enumeration="enum1,enum2,enum3,enum4")]
public var attribute:String;
可在代码提示中列举出该属性的枚举值
[Event(name="value",type="com.yourLib.yourEvent")]
可在addEventListener( 后进行代码提示
[Bindable]
数据和函数绑定
[ArrayElementType("Number")]
规定数组中的元素类型
[Embed(source="source.swf",symbol="instanceName")]
嵌入外部资源
11,Flex深度拷贝和类注入================================================================
可用mx.utils.ObjectUtil.copy()方法进行对象的拷贝,原理如下:
var ba:ByteArray = new ByteArray();
ba.writeObject(obj);
var newObj:Object = ba.readObject();
但是此方法不能深度拷贝自定义类的对象,因为Flash Player中无自定义类的注册信息,但是深度拷贝
前可用以下方法注册类信息。
public function copyOverObject(obj:Object):Object {
var className = flash.utils.getQualifiedClassName(obj);//获取自定义类对象的全类名
var classT:Class = flash.utils.getDefinitionByName(className);//得到自定义类的信息
flash.net.registerClassAlias(className,ClassT);//向flash player注册类信息
return mx.utils.objectCopy(obj);//深度拷贝自定义对象
}
12,Flex 类自动载入=====================================================================
以ModuleLoader加入应用程序的Module,在应用程序中可以通过flash.utils.getDefinitionByName()取得
Module中定义的类,以此可借来做类的动态载入
另外以SwfLoader和Loader对象加入的swf文件,可以通过obj.contentLoaderInfo.applicationDomain.getDefinitionByName()
来取得被加入的swf文件里面定义的类信息,再通过new,就可以被当前应用程序使用了。
13,获取显示对象的位图===================================================================
利用 BitmapData.draw(目标显示对象);
14,Flex截取控件形成对应的位图============================================================
BitmapData.draw()
15,Flex 布局之关于组建大小属性============================================================
width:组件当前实际宽度
explicitWidth:显示指定的宽度,与percentWidth相对
percentWidth:组件的百分比宽度
scaleX:组件的缩放比例
16,关于Event.ADDED,ADDED_TO_STAGE,REMOVED,REMOVED_FROM_STAGE事件===========
容器删除子对象时会发出REMOVED事件
容器自身被删除时会发出REMOVED,REMOVED_FROM_STAGE事件
容器原来已经在舞台中,再次被 addChild到 舞台会依次发出REMOVED、REMOVED_FROM_STAGE
ADDED、ADDED_TO_STAGE事件
ADDED事件发生的次数取决于控件的复杂度,如往一个VBox里面添加一个Button『Button由3个
基本控件组成』,VBox会被触发3次ADDED事件。
17,SWFLoader声音关闭问题===========================================================
当swfLoader加载外部swf文件后,被移除显示列表后声音关闭不了,可用SoundMixer.stopAll()或
swfLoader.unloadAndStop()关闭声音。
18,Flash无法获取一首未完全下载的mp3总长度,但可用下列方法模糊计算出来====================
MaxLength = bytesTotal / bytesLoaded * length;//length为当前下载好的mp3字节对应的音乐长度
19,flash全屏========================================================================
as:stage.displayState = StageDisplayState.FULL_SCREEN;
html:allowFullScreen = true;
20:VBox高度问题====================================================================
当想用类似VBox嵌套VBox时,要求子容器的width和height一样,不该简单的设置width和height为100%
,因这样的设置,当子容器的控件很多时,子容器的width和height会自动扩大以满足内部控件对空间的
需求,滚动条就永远不会出现在子容器上,这个问题可以采用绑定的方法解决 widht={parent.width},
这样子容器的滚动条就正常了。