diff --git a/sqr/Core/BaseClass/AnimationClass/AnimationClass.nut b/sqr/Core/BaseClass/AnimationClass/AnimationClass.nut index fd63f79..ea93008 100644 --- a/sqr/Core/BaseClass/AnimationClass/AnimationClass.nut +++ b/sqr/Core/BaseClass/AnimationClass/AnimationClass.nut @@ -11,10 +11,14 @@ class Animation extends Actor { //当前帧数 CurrentFrameIndex = 0; + //总帧数 + TotalFrameIndex = 0; //当前帧时间 CurrentIndexT = 0; //当前帧 CurrentFrame = null; + //下帧延迟 + NextFrameDelay = 9999999; //状态机对象(只有存在时才有KeyFlag) StateMachine = null; @@ -118,7 +122,6 @@ class Animation extends Actor { Spritebuf.SetPosition(FrameObj.Pos); - SpriteArr.append(Spritebuf); } } else { @@ -127,6 +130,8 @@ class Animation extends Actor { //初始化完毕 如果是第一次初始化 而非重新构造 设置大小为第0帧大小否则天空 地板等依靠大小的初始化会有问题 if (CurrentIndexT == 0) SetSize(SpriteArr[0].GetSize()); + //记录总帧数 + TotalFrameIndex = FrameArr.len(); } //被添加时 要刷新一下当前帧 @@ -159,7 +164,9 @@ class Animation extends Actor { CurrentFrame = SpriteArr[CurrentFrameIndex]; Addchild(SpriteArr[CurrentFrameIndex]); - local FlagBuf = FrameArr[CurrentFrameIndex].Flag; + local FrameInfo = FrameArr[CurrentFrameIndex]; + local FlagBuf = FrameInfo.Flag; + NextFrameDelay = FrameInfo.Delay; //关键帧 if ("SET_FLAG" in FlagBuf) { if (StateMachine && StateMachine.State != -1) StateMachine.ChangeAniKeyFlag(FlagBuf.SET_FLAG); @@ -179,17 +186,16 @@ class Animation extends Actor { //override function OnUpdate(dt) { - //可用性检查 if (IsUsability) { //累加当前帧时间 CurrentIndexT += dt; //当前帧时间 超过 当前帧延迟就需要切换帧了 - if (CurrentIndexT >= FrameArr[CurrentFrameIndex].Delay) { + if (CurrentIndexT >= NextFrameDelay) { CurrentIndexT = 0; //如果当前帧小于总帧数就切换 - if (CurrentFrameIndex<(FrameArr.len() - 1)) { + if (CurrentFrameIndex<(TotalFrameIndex - 1)) { FlushFrame(CurrentFrameIndex + 1); } //说明播放完毕了 @@ -206,10 +212,8 @@ class Animation extends Actor { } } } - - } - - base.OnUpdate(dt); + //Animation类下只会有精灵 因此不需要对子对象进行更新 + // base.OnUpdate(dt); } } \ No newline at end of file