优化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;
//总帧数
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);
}
}