无尽的征途,不灭的脚印.
从今日(公元后2009年6月22日)开始,留下自己看过的小代码,供日后查阅.

1.光标管理器CursorManager[Flex]

注:setCursor()的第二个参数是用来设置光标的优先级,值越小的显示优先级越高,默认是2

自定义光标
  1. [Embed(source="files/cur/levelSizeCur.png")]      
  2. public var levalSizeCur:Class;//嵌入光标图标   
  3. this.addEventListener(MouseEvent.MOUSE_OVER,thisOverFun)      
  4. this.addEventListener(MouseEvent.MOUSE_OUT,thisOutFun)      
  5. private function thisOverFun(event:MouseEvent):void{      
  6.             curID=CursorManager.setCursor(txtCur,2,-13,-13)      
  7.         }      
  8. private function thisOutFun(event:MouseEvent):void{      
  9.             CursorManager.removeCursor(curID);      
  10.         }   
2.管理拖放操作DragManager[Flex]
Flex代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application creationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">   
  3.     <mx:Script>   
  4.         <![CDATA[   
  5.             import mx.controls.Alert;   
  6.             import mx.events.DragEvent;   
  7.             import mx.core.DragSource;   
  8.             import mx.managers.DragManager;   
  9.             private function init():void{   
  10.                 c1.addEventListener(MouseEvent.MOUSE_DOWN,downFun)   
  11.                 c1.addEventListener(MouseEvent.MOUSE_UP,upFun)   
  12.                 c2.addEventListener(DragEvent.DRAG_ENTER,dragEventEnteredCalendarHandler);   
  13.                 c2.addEventListener(DragEvent.DRAG_DROP,dragDrop);   
  14.             }   
  15.             private function dragDrop(event:DragEvent):void{   
  16.                 var ds:DragSource=event.dragSource;   
  17.                 c2.addChild(ds.dataForFormat("drag")as Canvas)   
  18.             }   
  19.             private function dragEventEnteredCalendarHandler(event:DragEvent):void{   
  20.                 var ds:DragSource=event.dragSource;   
  21.                 //Alert.show(String(ds.dataForFormat("drag")))   
  22.                 event.action = DragManager.COPY;   
  23.                 DragManager.showFeedback(DragManager.COPY);   
  24.                 DragManager.acceptDragDrop(c2)   
  25.                    
  26.             }   
  27.             private function downFun(event:MouseEvent):void{   
  28.                 var ds:DragSource = new DragSource();   
  29.                 ds.addData(event,"event");   
  30.                 ds.addData(event.target,"drag");   
  31.                 DragManager.doDrag(c1,ds,event)   
  32.             }   
  33.             private function upFun(event:MouseEvent):void{   
  34.                    
  35.             }   
  36.                
  37.         ]]>   
  38.     </mx:Script>   
  39.     <mx:Canvas  x="52" y="62" width="248" height="198" id="c1" backgroundColor="#FF8F8F">   
  40.         <mx:Button x="10" y="98" label="Button" id="bt"/>   
  41.     </mx:Canvas>   
  42.     <mx:Canvas x="308" y="62" width="367" height="342" id="c2" backgroundColor="#B5B5B5">   
  43.     </mx:Canvas>   
  44. </mx:Application>   

 

3.将元件保存为图片[AIR]

使用二进制方式写入文件流,保存图片到本地.

当然,也可以将图片的二进制数据保存到记事本或数据库之中.

AS3代码
  1. //用到的几个关键类,需要导入   
  2. import flash.display.BitmapData;   
  3. import flash.filesystem.File;   
  4. import flash.filesystem.FileMode;   
  5. import flash.filesystem.FileStream;   
  6. import flash.utils.ByteArray;   
  7. import mx.graphics.codec.PNGEncoder;   
  8.   
  9. var spr:Sprite=new Sprite();      
  10. spr.graphics.beginFill(0xffcc00);      
  11. spr.graphics.drawRect(0,0,50,50);      
  12. var image:BitmapData = new BitmapData(spr.width,spr.height);      
  13. image.draw(spr);//转化为BitmapData数据      
  14. var png:PNGEncoder=new PNGEncoder;      
  15. var bytes:ByteArray = png.encode(image);      
  16. var myFile:File = File.documentsDirectory;      
  17. myFile = myFile.resolvePath("D://testSpr.png");//创建图片载体      
  18. var myFileStream:FileStream = new FileStream();      
  19. myFileStream.open(myFile, FileMode.WRITE);//使用写入创建      
  20. myFileStream.writeBytes(bytes);//将字节数组的字节序列写入到文件流    

上面的代码是将图片保存为PNG格式,以下是保存为JPG格式

保存为JPG格式
  1. import mx.graphics.codec.JPEGEncoder;   
  2. var jpgenc:JPEGEncoder = new JPEGEncoder(100);
  3. var bytes:ByteArray = jpgenc.encode(bmpd);   
 
4.鲜为人知的addFrameScript[AS3]
addFrameScript可以向MovieClip中指定的针上添加代码,这是MovieClip隐藏的方法,你在HELP中是搜不到的.
使用方法:
MovieClip.addFrameScript(帧号:uint,函数:Function,[帧号:uint,函数:Function]..):void
例子:
在第5帧中输出字符
  1. mymc.addFrameScript(4,runAs);    
  2. function runAs(){    
  3. trace("www.shch8.com");    
  4. }
注意,不能在参数里使用代码,如mymc.addFrameScript(0,trace("OK"));这是错误的,但可以对多个帧同时添加代码.
例子:
AS3代码
  1. mymc.addFrameScript(0,runAs0,4,runAs5,9,runAs10);    
  2. function runAs0(){ //在第1帧里输出   
  3. trace("进入第1帧");    
  4. }    
  5. function runAs5(){ //在第5帧里输出   
  6. trace("进入第5帧");    
  7. }    
  8. function runAs10(){ //在第10帧里输出   
  9. trace("进入第10帧");    
  10. }   
 删除帧上的代码,可以用null值,也会删去手工添加的代码
删除第5帧与第10帧的代码
  1. mymc.addFrameScript(4,null,9,null);   
 这个方法只能使用帧号,如果要使用帧标签怎么办呢?
有办法,我写了个搜索方法,只要调用下就行了,代码如下:
AS3代码
  1. /**      
  2. * @param    mc          要搜索的影片剪辑      
  3. * @param    labelName   标签名      
  4. * @author WZH(shch8.com)    
  5. * @return   返回uint型帧号,如果没搜索到则返回null      
  6. *通过帧标签搜索帧号*/        
  7. private function getFrameID(mc:MovieClip,labelName:String):uint {         
  8.     var labels:Array = mc.currentLabels;         
  9.     for (var i:uint = 0; i < labels.length; i++) {         
  10.         var label:FrameLabel = labels[i];         
  11.         if (label.name==labelName) {         
  12.             return label.frame;         
  13.         }         
  14.     }         
  15.     return null;         
  16. }    
  17. //使用举例   
  18. mymc.addFrameScript(getFrameID(mymc,"end"),runAs);        
  19. function runAs(){    
  20.    trace("进入了标签名为“end”的帧");        
  21. }  
 
5.继承UIComponent开发时容易忽略的几个属性[Flex]
1.percentHeight和percentWidth(类型:Number)
如果组件要设置成100%的宽度,不能在width属性中直接设置,使用这两个属性可以设置百分比,值为(0-100).
2.explicitHeight和explicitWidth(类型:Number)
设置组件在组件坐标中显式宽度(以像素为单位)的数字.此属性可用作数据绑定的源
3.measuredHeight和measuredWidth(类型:Number)
设置组件的默认宽度和高度
4.maxHeight和maxWidth(类型:Number)
设置组件的最大宽度和高度
5.minHeight和minWidth(类型:Number)
设置组件的最小宽度和高度 
 
6.获取文件所在路径[AS3]

·获取SWF文件所在路径:stage.loaderInfo.url

·在AIR中,使用File对象来获取EXE文件所在路径:File.applicationDirectory.resolvePath(".").nativePath

7.TextField中defaultTextFormat属性与setTextFormat()方法的区别

·defaultTextFormat属性是设置默认样式的,在文本赋值之前设置才能生效,只对htmlText中未使用<font>标签样式的文字起作用。

·setTextFormat()方法是设置全局样式的,在文本赋值之后设置才能生效,使用这个方法设置后htmlText中使用<font>标签的文字样式会丢失。

 8.Sprite中的hitArea属性

为了扩大或改变sprite的鼠标事件区域而准备的,只要传入一个sprite对象就行了,可以把这个对象当前感应区来用.

AS3代码
  1. spr.hitArea=focusSpr   
  2. spr.addEventListener(MouseEvent.CLICK,clickFun)   
  3. function clickFun(e:MouseEvent):void  
  4. {   
  5.      trace(e.target == st); // true   
  6. }  

 9.可以手动释放内存的API

 

AS3代码
  1. BitmapData.dispose()      
  2. System.disposeXML()//针对XML在Player10.1以上才有效      
  3. Loader.unloadAndStop()   
  4. System.gc()//这个在调试版模式使用才有效