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);
}
}
}
}
}
AnimationState
最新推荐文章于 2024-05-21 15:41:41 发布