添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我们想要做的是创造一个能像通用时钟一样工作的表达式。它应该能够显示小时、分钟、秒和毫秒。我们希望能够轻松地设置开始时间、计数速度、计数是向上还是向下,以及显示多少毫秒的数字。如果时钟时间小于零,就能显示一个负号(“-”),这也很好。表达式应该是易于编辑的,这样,例如,如果我们不希望显示小时数,就可以很容易地更改代码。

最合理的方法是为文本层的源文本(Source Text)属性开发一个表达式。在这个表达式中,我们将计算表示时钟当前时间的不同组件(小时、分钟、秒和毫秒)。在表达式的开头,我们将定义两个变量, rate clockStart 。rate 是我们的时钟计数速度与真实时间或合成时间相比的乘数。所以如果我们想让它以与挂钟有相同的 rate 计数,我们只需将它设为 1 。由于 rate 是乘数,如果我们把它的值设为负数,时钟就会倒数。

变量 clockStart 将表示我们的时钟的开始时间。因为 After Effects 中的时间值总是表示为秒,也是我们在本例中所使用的单位。否则,如果我们将 clockStart 定义为一个像 "00:00:00:00.000" 这样的字符串,无论如何,我们都必须编写代码将其转换为秒。

对于每一个小时、分钟和秒组件,我们将通过一个函数(我们将其称为 padZero() )运行它们,该函数将将值转换为字符串,并在必要时添加一个前导零(leading zero)。这样我们就会得到一个每个组件都两位数的字符串。我们将以稍微不同的方式处理毫秒,利用内置的 JavaScript 函数 toFixed() ,该函数用于将一个数字转换为具有固定位数的字符串。

最后,我们将设置表达式,以便最后一行是所有部件组装到最终输出字符串的地方。例如,只需从该行中删除小时组件,就可以很容易地从输出中删除它。

表达式代码

/// @note 以合成时间的 2 倍速率进行倒数
rate = -2; ///< 时钟速率,作为合成时间的乘数;负值会引起时钟倒数
clockStart = 3604.999; ///< 1 小时 4.999 秒
/// @note 转换数字为字符串
/// 如果数字小于 10,则添加一个前导 0
function padZero(n) {
    return (n < 10 ? "0" : "") + n;
clockTime = clockStart + rate * (time - inPoint);
if (clockTime < 0) {
    sign = "-";
    clockTime = -clockTime;
} else {
    sign = "";
t = Math.floor(clockTime);
/// @note 计算小时、分钟、秒
hr = Math.floor(t / 3600);
min = Math.floor((t % 3600) / 60);
sec = Math.floor(t % 60);
/// @note 计算毫秒,3 位数
ms = clockTime.toFixed(3).substr(-3); ///< 先四舍五入指定小数位数,然后从倒数第三个开始取字符串
sign + padZero(hr) + ":" + padZero(min) + ":" + padZero(sec) + "." + ms
    ShaderJoy
        首席 BUG 制造科学家+资深负优化专家+高级代码 CV 工程师 @美图网科技有限公司
       
粉丝