无尽的征途,不灭的脚印.
从今日(公元后2009年6月22日)开始,留下自己看过的小代码,供日后查阅.
1.光标管理器CursorManager[Flex]
注:setCursor()的第二个参数是用来设置光标的优先级,值越小的显示优先级越高,默认是2
自定义光标
- [Embed(source="files/cur/levelSizeCur.png")]
- public var levalSizeCur:Class;
- this.addEventListener(MouseEvent.MOUSE_OVER,thisOverFun)
- this.addEventListener(MouseEvent.MOUSE_OUT,thisOutFun)
- private function thisOverFun(event:MouseEvent):void{
- curID=CursorManager.setCursor(txtCur,2,-13,-13)
- }
- private function thisOutFun(event:MouseEvent):void{
- CursorManager.removeCursor(curID);
- }
2.管理拖放操作DragManager[Flex]
Flex代码
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application creationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
- <mx:Script>
- <![CDATA[
- import mx.controls.Alert;
- import mx.events.DragEvent;
- import mx.core.DragSource;
- import mx.managers.DragManager;
- private function init():void{
- c1.addEventListener(MouseEvent.MOUSE_DOWN,downFun)
- c1.addEventListener(MouseEvent.MOUSE_UP,upFun)
- c2.addEventListener(DragEvent.DRAG_ENTER,dragEventEnteredCalendarHandler);
- c2.addEventListener(DragEvent.DRAG_DROP,dragDrop);
- }
- private function dragDrop(event:DragEvent):void{
- var ds:DragSource=event.dragSource;
- c2.addChild(ds.dataForFormat("drag")as Canvas)
- }
- private function dragEventEnteredCalendarHandler(event:DragEvent):void{
- var ds:DragSource=event.dragSource;
-
- event.action = DragManager.COPY;
- DragManager.showFeedback(DragManager.COPY);
- DragManager.acceptDragDrop(c2)
-
- }
- private function downFun(event:MouseEvent):void{
- var ds:DragSource = new DragSource();
- ds.addData(event,"event");
- ds.addData(event.target,"drag");
- DragManager.doDrag(c1,ds,event)
- }
- private function upFun(event:MouseEvent):void{
-
- }
-
- ]]>
- </mx:Script>
- <mx:Canvas x="52" y="62" width="248" height="198" id="c1" backgroundColor="#FF8F8F">
- <mx:Button x="10" y="98" label="Button" id="bt"/>
- </mx:Canvas>
- <mx:Canvas x="308" y="62" width="367" height="342" id="c2" backgroundColor="#B5B5B5">
- </mx:Canvas>
- </mx:Application>
3.将元件保存为图片[AIR]
使用二进制方式写入文件流,保存图片到本地.
当然,也可以将图片的二进制数据保存到记事本或数据库之中.
AS3代码
-
- import flash.display.BitmapData;
- import flash.filesystem.File;
- import flash.filesystem.FileMode;
- import flash.filesystem.FileStream;
- import flash.utils.ByteArray;
- import mx.graphics.codec.PNGEncoder;
-
- var spr:Sprite=new Sprite();
- spr.graphics.beginFill(0xffcc00);
- spr.graphics.drawRect(0,0,50,50);
- var image:BitmapData = new BitmapData(spr.width,spr.height);
- image.draw(spr);
- var png:PNGEncoder=new PNGEncoder;
- var bytes:ByteArray = png.encode(image);
- var myFile:File = File.documentsDirectory;
- myFile = myFile.resolvePath("D://testSpr.png");//创建图片载体
- var myFileStream:FileStream = new FileStream();
- myFileStream.open(myFile, FileMode.WRITE);
- myFileStream.writeBytes(bytes);
上面的代码是将图片保存为PNG格式,以下是保存为JPG格式
保存为JPG格式
- import mx.graphics.codec.JPEGEncoder;
- var jpgenc:JPEGEncoder = new JPEGEncoder(100);
- var bytes:ByteArray = jpgenc.encode(bmpd);
4.鲜为人知的addFrameScript[AS3]
addFrameScript可以向MovieClip中指定的针上添加代码,这是MovieClip隐藏的方法,你在HELP中是搜不到的.
使用方法:
MovieClip.addFrameScript(帧号:uint,函数:Function,[帧号:uint,函数:Function]..):void
例子:
在第5帧中输出字符
- mymc.addFrameScript(4,runAs);
- function runAs(){
- trace("www.shch8.com");
- }
注意,不能在参数里使用代码,如mymc.addFrameScript(0,trace("OK"));这是错误的,但可以对多个帧同时添加代码.
例子:
AS3代码
- mymc.addFrameScript(0,runAs0,4,runAs5,9,runAs10);
- function runAs0(){
- trace("进入第1帧");
- }
- function runAs5(){
- trace("进入第5帧");
- }
- function runAs10(){
- trace("进入第10帧");
- }
删除帧上的代码,可以用null值,也会删去手工添加的代码
删除第5帧与第10帧的代码
- mymc.addFrameScript(4,null,9,null);
这个方法只能使用帧号,如果要使用帧标签怎么办呢?
有办法,我写了个搜索方法,只要调用下就行了,代码如下:
AS3代码
-
-
-
-
-
-
- private function getFrameID(mc:MovieClip,labelName:String):uint {
- var labels:Array = mc.currentLabels;
- for (var i:uint = 0; i < labels.length; i++) {
- var label:FrameLabel = labels[i];
- if (label.name==labelName) {
- return label.frame;
- }
- }
- return null;
- }
-
- mymc.addFrameScript(getFrameID(mymc,"end"),runAs);
- function runAs(){
- trace("进入了标签名为“end”的帧");
- }
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)
设置组件的最小宽度和高度
·获取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代码
- spr.hitArea=focusSpr
- spr.addEventListener(MouseEvent.CLICK,clickFun)
- function clickFun(e:MouseEvent):void
- {
- trace(e.target == st);
- }
9.可以手动释放内存的API
AS3代码
- BitmapData.dispose()
- System.disposeXML()
- Loader.unloadAndStop()
- System.gc()
写的不错,以后常来看看学习!
做了个友情链接。不错。很高兴能访问到你的站来。哈哈
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。