loadin Do…

一条只能往前走的路,叫时光.

首页 联系 订阅 管理
1.判断键盘某个按键是否按下:
use:在主类的构造函数中KeyIsDown.init(stage)
Titlepackage tools{
        public class KeyIsDown{
                private static var obj;
               
                public static function init(stage){
                        obj = new Object();
                        stage.addEventListener("keyDown", keydownHandler);
                        stage.addEventListener("keyUp", keyupHandler);
                }
               
                public static function isDown(key){
                        return(obj[key] ? true : false);
                }
               
                private static function keydownHandler(event){
                        obj[event.keyCode] = true;
                }
               
                private static function keyupHandler(event){
                        obj[event.keyCode] = false;
                }
               
        }
}


2.对象深copy
Titleimport flash.utils.ByteArray;

function clone(source:Object):*
{
    var myBA:ByteArray = new ByteArray();
    myBA.writeObject(source);
    myBA.position = 0;
    return(myBA.readObject());
}


3. 相关slide问题,up后不在跟随
加个:stage.addEventListener(MouseEvent.MOUSE_UP,mu);
Titlebox_mc.addEventListener(MouseEvent.MOUSE_DOWN,md);
box_mc.addEventListener(MouseEvent.MOUSE_UP,mu);
stage.addEventListener(MouseEvent.MOUSE_UP,mu);

function md(evt:MouseEvent):void{
        box_mc.addEventListener(Event.ENTER_FRAME,fn);
}
function mu(evt:MouseEvent):void{
        box_mc.removeEventListener(Event.ENTER_FRAME,fn);
}
function fn(evt:Event):void{
        box_mc.x=stage.mouseX;
        box_mc.y=stage.mouseY;
}

4.键盘控制
Title
/**
* 键盘控制类
* 把键盘按键动作格式化,一般用于游戏。作者:飞雨影
* 用法:Control.initStage(stage),初始化舞台;Control.addListener(function),添加listener;
* 改变控制设置:Control.changeControl(array);array为设置的keyCode
*/

package
{
        import flash.display.Stage;
        import flash.events.KeyboardEvent;
        import flash.events.EventDispatcher;
        import flash.events.Event;
       
        public class Control
        {
                 /**
                 * state为按钮状态,是否按下 isDown来得到状态
                 * controlKeyCode 为按钮控制设置数组,
                 * 默认为 w=上,s=下,a=左,d=下,u,i,j,k为四个动作按钮
                 */  
                static private var state: Array = new Array(),controlKeyCode:Array=new Array(87,83,65,68,85,73,74,75);
                static private var controlKey:Array=new Array(),controlName:Array=new Array('上','下','左','右','轻拳','重拳','轻脚','重脚');
                static private var eventDispatcher:EventDispatcher=new EventDispatcher();
                static public function initStage( stage:Stage ): void
                {
                        var len:uint=controlKeyCode.length;
                        for(var i:uint=0;i<len;i++)
                        {
                                controlKey[controlKeyCode[i]]=controlName[i];
                        }
                        stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
                        stage.addEventListener( KeyboardEvent.KEY_UP, onKeyUp );
                }
                static public function isDown( code: uint ): Boolean
                {
                        return state[ code ] == true;
                }
                static public function changeControl(keyCode:Array):void
                {
                        controlKeyCode = keyCode;
                }               
        static public function addListener(listener:Function):void
        {
                var len:uint=controlKeyCode.length;
                for(var i:uint=0;i<len;i++)
                {
                        eventDispatcher.addEventListener(controlName[i],listener);
                        eventDispatcher.addEventListener(controlName[i]+'release',listener);
                }
        }
                static private function onKeyDown( event: KeyboardEvent ): void
                {
                        var code:uint=event.keyCode
                        if(!isDown(code))
                        {
                                state[ code ] = true;
                            //trace( code,"按下");
                           if(controlKey[code])eventDispatcher.dispatchEvent(new Event(controlKey[code]));
                        }
                       
                }
                static private function onKeyUp( event: KeyboardEvent ): void
                {
                        var code:uint=event.keyCode
                                state[ event.keyCode ] = false;
                                //trace(event.keyCode,'释放')
                                if(controlKey[code])eventDispatcher.dispatchEvent(new Event(controlKey[code]+"release"));
                }

        }
}

5.鼠标经过文本变色
Title
var myText:TextField=new TextField()
myText.text="当我和世界不一样,那就让我不一样"
myText.width=myText.height=300
myText.x=myText.y=100
var myTextFormat_old=new TextFormat()
myTextFormat_old.color="0x000000"
myTextFormat_old.size=12
var myTextFormat_new=new TextFormat()
myTextFormat_new.color="0xff0000"
myTextFormat_new.size=24
function enterFrameListener(event:Event) {
myText.setTextFormat(myTextFormat_old);
      var charIndex:int = myText.getCharIndexAtPoint(myText.mouseX,myText.mouseY);//不断取得指定位置的字符索引
     if(charIndex==-1){//如果鼠标移出文本
                return;}
          myText.setTextFormat(myTextFormat_new,charIndex,charIndex+1);
    }

addEventListener(Event.ENTER_FRAME, enterFrameListener);//注册桢循环事件
addChild(myText)


6.连接flashcomserver,视频聊天
Titlepackage {
        import flash.display.Sprite;
        import flash.net.NetConnection;
        import flash.net.NetStream;
        import flash.events.NetStatusEvent;
        import flash.media.Video;
        import flash.media.Camera;
        import flash.events.ActivityEvent;

        public class videoChat extends Sprite
        {
                [ SWF( backgroundColor='0xdedede', frameRate='500', width='512', height='512' ) ]//设置swf参数
                private var conn:connFcs,camera:Camera,videoIn:Video,outStream:NetStream,inStream:NetStream;
                public function videoChat()
                {
                        var url:String="rtmp:/test_chat";//连接地址
                        var conn:connFcs=new connFcs(url);//建立连接,这个类在最下面的
                        this.conn=conn;
                        conn.addEventListener(NetStatusEvent.NET_STATUS,NetStatusEventHandel);//监视连接状态
                }
                private function NetStatusEventHandel(event:NetStatusEvent):void
                {
                        trace(event.info.code);
                        if(event.info.code=="NetConnection.Connect.Success")//如果连接成功
                        {
                                init();//初始化
                                publishStream();//发布视频
                        }
                }
                private function publishStream():void
                {
                        outStream=new NetStream(conn);
                        outStream.publish("test","record");//发布参数,test为视频名,record表示是要保存的,如果不保存用live
                        outStream.attachCamera(camera);
                        inVideo();
                }
                private function inVideo():void
                {//接收视频
                        inStream=new NetStream(conn);
                        inStream.play("test");
                        videoIn.attachNetStream(inStream);
                }
                private function init():void
                {
                        videoIn=new Video();//添加一个视频为了接收
                        addChild(videoIn);
                       
                        camera=Camera.getCamera();//得到摄像头
                        if(camera!=null)//如果有摄像头,添加一个视频到显示
                        {
                                camera.addEventListener(ActivityEvent.ACTIVITY,activityHandler);
                                var video:Video= new Video(camera.width * 2, camera.height * 2);
                                video.x=camera.width;
                                video.y=camera.height;
                                video.attachCamera(camera);
                            addChild(video);
                        }else{trace("you need camera!");}
                       
                }
                private function activityHandler(event:ActivityEvent):void
                {
                        trace('activityHandler'+event);
                }
               
        }
       
}
        import flash.net.NetConnection;
        import flash.net.ObjectEncoding;
       

class connFcs extends NetConnection
{
        private var url:String
        public function connFcs(url:String)
        {
                objectEncoding=ObjectEncoding.AMF0;//连接fcs需要设置这个
                this.url=url;
                connect(url);//开始连接
        }
}

7.自定义timer类,可以不等待便执行
Title
package {
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    public class MyTimer extends Timer {
    
        private var $delay:Number;
        private var $repeatCount:int;
        
        public function MyTimer(delay:Number, repeatCount:int = 0, startDelay:Boolean = true) {
            $delay = delay;
            $repeatCount = repeatCount;
            if (!startDelay) {
                delay = 0;
                repeatCount = 1;
                addEventListener(TimerEvent.TIMER_COMPLETE, startHandler);
            }
            super(delay, repeatCount);
        }
        private function startHandler(evt:TimerEvent):void {
            removeEventListener(TimerEvent.TIMER_COMPLETE, startHandler);
            this.delay = $delay;
            this.repeatCount = $repeatCount;
            super.start();
        }
    }
}

使用方法:
//传入startDelay为false即不等待而马上执行。
var timer:MyTimer = new MyTimer(1000, 5, false);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();


8.
posted on 2008-04-22 14:42  i'am sl  阅读(380)  评论(1)    收藏  举报