You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在MonoGame(XNA)中实现单次循环动画?适配Update方法方案

如何在MonoGame(XNA)中实现单次循环动画

嘿,我来帮你搞定这个单次循环动画的需求!你的现有代码已经有了基础框架,只需要调整几处逻辑就能实现播放一遍就停止的效果,咱们一步步来:

核心问题分析

你当前的Update方法在动画播放到最后一帧时,会把CurrentFrame重置为0,这是循环播放的逻辑。而单次循环动画的核心是:播放完最后一帧后就停止更新,不再从头重复。

修改后的Update方法代码

public void Update(GameTime gameTime)
{
    // 动画已经播放完毕的话,直接跳过更新逻辑
    if (Done)
        return;

    Timer += gameTime.ElapsedGameTime.Milliseconds;
    
    if (Timer > FrameTime)
    {
        // 只有当前帧还没到最后一帧时,才递增帧索引
        if (CurrentFrame < TotalFrames - 1)
        {
            CurrentFrame++;
        }
        else
        {
            // 到达最后一帧,标记动画完成
            Done = true;
        }
        
        Timer = 0;
    }
}

关键逻辑调整说明

  • 提前终止更新:开头先检查Done状态,如果动画已经完成,直接返回,避免做无用的计算。
  • 修正帧索引判断:因为帧索引是从0开始计数的(比如总帧数为6的话,帧索引是0-5),所以判断条件改为CurrentFrame < TotalFrames - 1,确保只有还没到最后一帧时才递增。
  • 完成状态锁定:当到达最后一帧时,直接把Done设为true,之后动画就会停止更新。

额外使用提示

如果之后需要重新播放这个动画,只需要手动重置两个状态即可:

// 重置动画以便再次播放
animation.CurrentFrame = 0;
animation.Done = false;

内容的提问来源于stack exchange,提问作者user280179

火山引擎 最新活动