首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

2009 - 2010 Flex 工作札记

2013-11-09 
2009 - 2010 Flex 工作笔记2009 - 2010 Flex 工作笔记 2010年07月11日  1,关于事件监听target和currentTar

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},
  这样子容器的滚动条就正常了。

热点排行