天天看點

AS3常用代碼

1. 拉選框

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文本聊天

<?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視訊聊天

<?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>

<?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的翻轉函數

public static function upanddown(bt:BitmapData):BitmapData

{

    var bmd:BitmapData = new BitmapData(bt.width, bt.height, true, 0x00000000);

    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, true, 0x00000000);

    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;

}

public static function turn90(bt:BitmapData):BitmapData

{

    var bmd:BitmapData = new BitmapData(bt.height, bt.width, true, 0x00000000);

    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;

}

public static function turn270(bt:BitmapData):BitmapData

{

    var bmd:BitmapData = new BitmapData(bt.height, bt.width, true, 0x00000000);

    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()僅處理本次監聽,然後立即阻止事件冒泡

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. 周遊對象屬性

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. 用代碼去執行一個對象的點選事件

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