You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

After Effects表达式:随机起始循环倒计时计时器问题求助

Adobe After Effects 随机起始循环倒计时表达式问题解决

Adobe After Effects支持JavaScript,提供了实用的time方法——它返回合成当前时间的浮点数,可灵活运用。比如60 - time就能实现从60开始的倒计时。

需求是实现一个仅第一次从随机数起始、到0后重置为59循环的倒计时计时器,要求采用expressions-only方案,避免使用多合成与图层,实现多次重复循环。

现有代码如下:

seedRandom(45, timeless=true) // 让随机数不会逐帧变化

r = random(1, 59)
sec = r - time 

if (sec < 0) {
  sec = 60 - (time%60);
}

Math.floor(sec);

问题

上述代码可运行,但前两次循环均从随机数开始,无法实现仅第一次起始时使用随机数的要求。

解决方案

问题根源在于原代码每次计算时都会重新生成随机数r,即使使用seedRandom固定种子,也会在进入新周期时重新计算随机值。要解决这个问题,需要将随机起始值固定,仅在第一个周期使用,后续周期采用标准60秒循环逻辑。

修正后的表达式代码:

// 固定随机种子,确保随机值唯一且稳定
seedRandom(45, timeless=true);

// 生成仅生效一次的随机起始值
startRand = random(1, 59);
// 定义每个倒计时周期的时长(60秒)
cycleDuration = 60;
// 计算当前处于第几个周期(从0开始计数)
currentCycle = Math.floor(time / cycleDuration);

if (currentCycle === 0) {
    // 第一个周期:从随机数开始倒计时
    sec = startRand - time;
    // 当倒计时归0后,直接切入标准循环逻辑
    if (sec < 0) {
        sec = cycleDuration - (time % cycleDuration);
    }
} else {
    // 后续所有周期:执行标准60秒循环倒计时
    sec = cycleDuration - (time % cycleDuration);
}

// 取整数得到最终显示的倒计时数值
Math.floor(sec);

逻辑说明

  • 通过currentCycle判断当前所处的周期,第一个周期(currentCycle=0)使用预先生成的固定随机值作为起始点;
  • 当第一个周期的倒计时走到0后,自动切换到标准的60秒循环逻辑;
  • 后续所有周期都严格按照60秒循环,不会再生成新的随机数,彻底解决了前两次循环均从随机数起始的问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:15:18