常用代码(一)

1. 拉选框

AreaRect
package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    
    
public class AreaRect extends Sprite
    {
        
private var rect:Sprite;
        
private var point:Point;
        
        
public function AreaRect()
        {
            rect 
= new Sprite();
            stage.addChild(rect);
            stage.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
            stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
        }
        
        
private function onMouseDown(evt:MouseEvent):void
        {
            point 
= new Point(mouseX,mouseY);
            stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
        }
        
        
private function onMouseMove(evt:MouseEvent):void
        {
            rect.graphics.clear();
            rect.graphics.lineStyle(
2,0x0A7CCA,1);
            rect.graphics.drawRect(point.x,point.y,mouseX
-point.x,mouseY-point.y); 
        }
        
        
private function onMouseUp(evt:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
        }
    }
}

 

2. FMS文本聊天

Code
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s
="library://ns.adobe.com/flex/spark"
               xmlns:mx
="library://ns.adobe.com/flex/mx" initialize="init()">
    
<s:layout>
        
<s:BasicLayout/>
    
</s:layout>
    
<fx:Script>
        
<![CDATA[
            
private var nc:NetConnection;
            
private var so:SharedObject;
            
            
private function init():void
            {
                nc 
= new NetConnection();
                nc.connect(
"rtmp://localhost/virtualShow");
                nc.client 
= this;
                nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
            }
            
            
private function onNetStatus(evt:NetStatusEvent):void
            {
                trace(evt.info.code);
                
if(evt.info.code=="NetConnection.Connect.Success")
                {
                    so 
= SharedObject.getRemote("myMsg",nc.uri,false);
                    so.addEventListener(SyncEvent.SYNC,onSYNC);
                    so.connect(nc);
                }
            }
            
            
private function onSYNC(evt:SyncEvent):void
            {
                
for(var i:uint=0;i<evt.changeList.length;i++)
                {
                    
switch(evt.changeList[i].code)
                    {
                        
case "change":
                            updateList();
                            
break;
                        
case "clear":
                            
break;
                        
case "success":
                            
break;
                        
default:
                            
break;
                    }
                }
            }
            
            
private function updateList():void
            {
                msgList.text 
+= so.data.msg+"\n";
            }
            
            
protected function onClick(event:MouseEvent):void
            {
                so.setProperty(
"msg",txtInput.text);
                msgList.text
+=txtInput.text+"\n";
                txtInput.text
="";
            }
            
            
public function onBWDone():void{}
        ]]
>
    
</fx:Script>
    
<fx:Declarations>
        
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
    
</fx:Declarations>
    
<s:TextArea id="msgList" x="173" y="37" width="300" height="150"/>
    
<s:TextInput id="txtInput" x="173" y="218" width="209"/>
    
<s:Button id="btnPost" x="399" y="219" label="按钮" click="onClick(event)" />
</s:Application>

 

3. FMS视频聊天

发布端(Publish.mxml)
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s
="library://ns.adobe.com/flex/spark"
               xmlns:mx
="library://ns.adobe.com/flex/mx" initialize="init()">
    
<s:layout>
        
<s:BasicLayout/>
    
</s:layout>
    
<fx:Declarations>
        
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
    
</fx:Declarations>
    
<fx:Script>
        
<![CDATA[
            import mx.core.UIComponent;
            
private var nc:NetConnection;
            
private var mic:Microphone;
            
private var cam:Camera;
            
private function init():void
            {
                
//加载自己的摄像头
                mic = Microphone.getMicrophone();
                cam 
= Camera.getCamera();
                var video:Video 
= new Video();
                video.attachCamera(cam);
                var uiBox:UIComponent 
= new UIComponent();
                uiBox.addChild(video);
                
this.addElement(uiBox);
                nc 
= new NetConnection();
                nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
                nc.connect(
"rtmp://192.168.1.16/virtualShow");
                nc.client 
= this;
            }
            
private function onNetStatus(evt:NetStatusEvent):void
            {
                trace(evt.info.code);
                
if(evt.info.code=="NetConnection.Connect.Success")
                {
                    var ns:NetStream 
= new NetStream(nc);
                    ns.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
                    ns.attachAudio(mic);
                    ns.attachCamera(cam);
                    ns.client 
= this;
                    ns.publish(
"hxw","live");
                }
            }
            
public function onBWDone():void
            {
            }
        ]]
>
    
</fx:Script>
</s:Application>

 

接收端(Receive.mxml)
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s
="library://ns.adobe.com/flex/spark"
               xmlns:mx
="library://ns.adobe.com/flex/mx" initialize="init()">
    
<s:layout>
        
<s:BasicLayout/>
    
</s:layout>
    
<fx:Declarations>
        
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
    
</fx:Declarations>
    
<fx:Script>
        
<![CDATA[
            import mx.core.UIComponent;
            
private var nc:NetConnection;
            
private function init():void
            {
                nc 
= new NetConnection();
                nc.connect(
"rtmp://192.168.1.16/virtualShow");
                nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
                nc.client 
= this;
            }
            
private function onNetStatus(evt:NetStatusEvent):void
            {
                var ns:NetStream 
= new NetStream(nc);
                ns.play(
"hxw");
                var video:Video 
= new Video();
                video.attachNetStream(ns);
                var uiBox:UIComponent 
= new UIComponent();
                uiBox.addChild(video);
                
this.addElement(uiBox);
            }
            
public function onBWDone():void
            {
            }
        ]]
>
    
</fx:Script>
</s:Application>

 

4. PopupManager父窗体传值给子窗体

父窗体
private function btnAddFrontImg_Click():void
{
    
//var titleWindow:TitleWindow = PopUpManager.createPopUp(this, UploadImage, true)  as  TitleWindow;
    var titleWindow:UploadImage = PopUpManager.createPopUp(this, UploadImage, true)  as  UploadImage;
    titleWindow.uploadType 
= "一个值"
    PopUpManager.centerPopUp(titleWindow);
}

 

子窗体
public var uploadType:String="hxw";
private function onClick(event:MouseEvent):void
{
    Alert.show(uploadType); 
}

 

5. PopupManager子窗体传值给父窗体

父窗体
private function btnAddFrontImg_Click():void
{
    
//var titleWindow:TitleWindow = PopUpManager.createPopUp(this, UploadImage, true)  as  TitleWindow; 
    var titleWindow:UploadImage = PopUpManager.createPopUp(this, UploadImage, true)  as  UploadImage;
    titleWindow.addEventListener(
"tw_click",update);
    PopUpManager.centerPopUp(titleWindow);
}
private function update(event:Event):void
{
    Alert.show(
"测试");
}

 

子窗体
private function onClick(event:MouseEvent):void
{
    dispatchEvent(
new Event("tw_click"));
}

 

6. Bitmap的翻转函数

Code
/**垂直翻转*/
public static function upanddown(bt:BitmapData):BitmapData
{
    var bmd:BitmapData 
= new BitmapData(bt.width, bt.height, true0x00000000);
    
for (var xx:int=0; xx<bt.width; xx++
    {
        
for (var yy:int=0; yy<bt.height; yy++
        {
            bmd.setPixel32(xx, bt.height
-yy-1, bt.getPixel32(xx,yy));
        }
    }
    
return bmd;
}

/**水平翻转*/        
public static function rightandleft(bt:BitmapData):BitmapData 
{
    var bmd:BitmapData 
= new BitmapData(bt.width, bt.height, true0x00000000);
    
for (var yy:int=0; yy<bt.height; yy++
    {
        
for (var xx:int=0; xx<bt.width; xx++
        {
            bmd.setPixel32(bt.width
-xx-1, yy, bt.getPixel32(xx,yy));
        }
    }
    
return bmd;
}

/**90翻转*/        
public static function turn90(bt:BitmapData):BitmapData 
{
    var bmd:BitmapData 
= new BitmapData(bt.height, bt.width, true0x00000000);
    
for (var yy:int=0; yy<bt.height; yy++
    {
        
for (var xx:int=0; xx<bt.width; xx++
        {
            bmd.setPixel32(yy,bt.width
-xx, bt.getPixel32(xx,yy));
        }
    }
    
return bmd;
}

/**270翻转*/ 
public static function turn270(bt:BitmapData):BitmapData 
{
    var bmd:BitmapData 
= new BitmapData(bt.height, bt.width, true0x00000000);
    
for (var yy:int=0; yy<bt.height; yy++
    {
        
for (var xx:int=0; xx<bt.width; xx++
        {
            bmd.setPixel32(bt.height
-yy-1,bt.width-xx, bt.getPixel32(xx,yy));
        }
    }
    
return bmd;
}

 

7. Flex打包swc文件

FlexSDK中的compc命令可以将那些带包名的as文件编译成swf文件,并打包成一个文件,文件的扩展名是.swc,在Flash中这叫组件。其实组件文件格式实际上是zip, 把扩展名.swc改成.zip用winrar打开看看就知道了

假如是自己开发,可以先在本地把目录规划好,调试无误以后在单独拿出去打包

假如在"D:\项目\Tool\huxiaowei\classes"目录下有两个AS文件"GameTask.as","MovieTask.as",在Adobe Flex 3 SDK Command Prompt命令行下输入:

cd 项目\tool

compc 
-include-sources huxiaowei\classes\ output d:/hxwLib.swc

这样就将两个AS文件打包到d:\下名为hxwLib.swc包里了

在项目里就可以删除掉AS文件,只需要再ActionScript Build Path -> Library Path -> Add SWC下应用这个hxwLib.swc即可

PS:如果有一个AS是基于hxwLib.swc编写的,如果要将这个as编译成不必依赖组件的swf(即可以单独存在),可以进一步在命令行运行:

amxmlc -library-path=c:/3rd.swc HelloWorld.as

flashplayer HelloWorld.swf

 

8. 阻止事件冒泡

Event提供两个方法来阻止事件冒泡,evt.stopImmediatePropagation()和evt.stopPropagation()

如果某对象的一个事件同时添加多个监听,stopPropagation将把该事件注册的所有监听处理函数执行完后,再阻止该事件继续向上冒泡;而stopImmediatePropagation方法将本次处理函数执行完后就立即阻止事件继续向上冒泡(即同一事件的其它监听函数将不会执行)。

如果某对象的一个事件有多个监听,stopPropagation()将处理完所有的监听后,再阻止该事件冒泡;而stopImmediatePropagation()仅处理本次监听,然后立即阻止事件冒泡

Code
package
{
    import flash.display.Sprite;
    import flash.display.StageScaleMode;
    import flash.events.MouseEvent;
    import flash.events.TextEvent;
    
    
public class Test extends Sprite
    {
        
public function Test()
        {
            stage.scaleMode 
= StageScaleMode.NO_SCALE;
            
            var box:Sprite 
= new Sprite();
            
this.addChild(box);
            with(box)
            {
                graphics.beginFill(
0xCCCCCC);
                graphics.drawRect(
0,0,200,200);
                graphics.endFill();
                addEventListener(MouseEvent.CLICK,onBoxClick);
            }
            
            var item:Sprite 
= new Sprite();
            box.addChild(item);
            with(item)
            {
                graphics.beginFill(
0x000000);
                graphics.drawRect(
0,0,100,100);
                graphics.endFill();
                x 
= y = 50;
                addEventListener(MouseEvent.CLICK,onItemClick,
false,1);
                addEventListener(MouseEvent.CLICK,onItemClick2,
false,2);
            }
        }
        
        
private function onBoxClick(evt:MouseEvent):void
        {
            trace(
"box click");
        }
        
        
private function onItemClick(evt:MouseEvent):void
        {
            trace(
"item click 1");
        }
        
        
private function onItemClick2(evt:MouseEvent):void
        {
            trace(
"item click 2");
            
//不再执行onItemClick
            
//evt.stopImmediatePropagation();
            
            
//还是会执行onItemClick
            evt.stopPropagation();
        }
    }
}

 

9. 遍历对象属性

Code
var obj:Object = new Object();
obj.aa 
= "AAA";
obj.bb 
= "BBB";
obj.cc 
= "CCC";

for(var str:String in obj)
{
    trace(
"属性"+str+"的值是:"+obj[str]);
}

//只能获得属性的value,不能获得key
for  each(var p:String in obj) { 
    trace(p); 
}

 

10. 用代码去执行一个对象的点击事件

sprite1.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

 

 

posted @ 2010-07-15 15:35  CoderWayne  阅读(881)  评论(0编辑  收藏  举报