`
cloud21
  • 浏览: 389855 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

AnimationState

    博客分类:
  • Flex
阅读更多
package engine
{
        import flash.display.*;
        import flash.geom.*;
        
        public class AnimationState
        {
                public static var DIR_NULL:int = 0;
                public static var DIR_LEFT:int = 1;
                public static var DIR_RIGHT:int = 2;
                public static var DIR_UP:int = 4;
                public static var DIR_DN:int = 8;
                public static var DIR_LEFT_UP:int         = DIR_LEFT | DIR_UP;
                public static var DIR_LEFT_DN:int         = DIR_LEFT | DIR_DN;
                public static var DIR_RIGHT_UP:int         = DIR_RIGHT | DIR_UP;
                public static var DIR_RIGHT_DN:int         = DIR_RIGHT | DIR_DN;
                
                public static var MOTION_WALK:int                         = 0; //行走
                public static var MOTION_WAIT:int                         = 1; //普通待机
                public static var MOTION_FIGHT_WAIT:int         = 2; //战斗待机
                public static var MOTION_SKILL:int                         = 3; //施法
                
                
                private var m_nFrameNum:int                                        = 0; //动作总帧数
                private var m_nAnimTotalTime:int                         = 0; //动作时间长度(单位毫秒)
                private var m_nCurrDuration:int                         = 0; //当时动作已持续了多少时间
                private var m_nCurrMotionFrame:int                        = 0;        //当时动作插入到哪一帧了
                private var m_currMotion:int                                 = 0; //当时动作是编号
                private var m_Entity:Entity                                 = null; //动作的主人
                private var m_bLoop:Boolean                                        = false; //动作是否循环
                private var m_bMotionEnd:Boolean                        = false; //是否播完了
                
                public function AnimationState(nMotion:int, nFrameNum:int, nTotalTime:int, et:Entity, loop:Boolean)
                {
                        this.m_currMotion                 = nMotion;
                        this.m_nFrameNum                 = nFrameNum;
                        this.m_nAnimTotalTime         = nTotalTime;
                        this.m_Entity                        = et;
                        this.m_nCurrDuration        = 0;
                        this.m_bLoop                        = loop;
                }
                
                public function ResetMotion():void
                {
                        this.m_nCurrDuration         = 0;
                        this.m_bMotionEnd                = false;
                }
                
                public function MotionIsEnd():Boolean
                {
                        return this.m_bMotionEnd;
                }
                
                public function AddTime():void
                {
                        var nFrameTime:int = Engine.GetInstance().GetCurrFrameTime();
                        this.m_nCurrDuration += nFrameTime;
                        
                        if (m_bMotionEnd) return;
                        
                        //算出每一帧插入的时间长度
                        var nSingleFrameTime:int = this.m_nAnimTotalTime / this.m_nFrameNum;
                        var nFrameNum:int = this.m_nCurrDuration/nSingleFrameTime;
                        if (nFrameNum > this.m_nFrameNum)
                        {
                                                                m_nCurrDuration = this.m_nCurrDuration % nSingleFrameTime;
                                if (this.m_bLoop)
                                {
                                        nFrameNum = 0;        
                                }
                                else
                                {
                                        m_bMotionEnd = true;
                                        return;
                                }
                        }
                        
                        //算出来的帧和当前帧相同就什么也不做
                        if (nFrameNum == this.m_nCurrMotionFrame) return;
                        
                        //设置为当前帧
                        this.m_nCurrMotionFrame = nFrameNum;
                        
                        //单帧的象素宽度和高度
                        var nFramePixelWidth:int = this.m_Entity.GetSurface().width;
                        var nFramePixelHeight:int = this.m_Entity.GetSurface().height;
                        
                        //画
                        var bmpArr:Array = this.m_Entity.GetBmpArr();
                        var nLen:int = bmpArr.length;
                        var nY:int = this.m_Entity.GetTopPosByDir();
                        for (var i:int=0; i<nLen; i++)
                        {
                                var bmd:BitmapData = bmpArr[i] as BitmapData;
                                if (bmd)
                                {
                                        var rect:Rectangle = new Rectangle(m_nCurrMotionFrame*nFramePixelWidth,
                                                                                                        nY, nFramePixelWidth, nFramePixelHeight);
                                        this.m_Entity.GetSurface().copyPixels(bmd, rect, new Point(), null, null, true);
                                }                
                        }
                }
        }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics