优化Animation 性能

This commit is contained in:
Lenheart 2024-12-16 20:31:28 +08:00
parent 7b53180344
commit 3c73480642
1 changed files with 13 additions and 9 deletions

View File

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