全面披露:我讨厌 while 循环。我花了很长时间才理解它们,但我想我终于明白了它们的目的。
一开始,每次我尝试编写自己的 while 循环时,After Effects 都会立即崩溃。现在我对出了什么问题有了更多的了解,我想写下什么是 while 循环、何时使用它,以及如何将它合并到 After Effects 表达式中而不会使项目崩溃(请记住定期保存,各位)。
while 循环,顾名思义,是一个只要表达式为 true 就执行的循环。
“只要表达式为真就执行”——这听起来有点像 if 语句,不是吗?
if (time如果将此表达式添加到文本图层的“源文本”属性中,您会发现时间线的前 2 秒文本显示为“文本打开”,并且在该时间之后不显示任何文本。 if 语句检查表达式是否为真,如果为真,则执行命令 一次,并且仅执行一次。
但是,如果你将其更改为这个表达式,你会发现After Effects几乎立即崩溃:
while (time这是因为while循环是一个循环,所以如果语句为真,它会重复执行命令。只要您的光标位于时间线的前 2 秒,while 循环就会无限循环。并不完全理想,当然也不是我们想要实现的目标!重要的是要确保您的 while 循环最终会变为 false,以避免这些无限循环。
有关 if 语句的更多信息,请参阅我之前的文章。while 循环与 for 循环
好的,所以请务必注意不要使用像 if 语句这样的 while 循环。但是我们还可以使用其他类型的循环来创建表达式。例如,while 循环与 for 循环有何不同?
for 循环使用 3 个参数,当您
知道需要循环命令多少次时,它是理想的选择。
以本例为例,生成随机数://变量 让计数器= 0; 让数字= 0; 让numArray = []; //for循环 for (令 i = 0; 时间 >= i/2; i ) { SeedRandom(计数器,永恒= true); num = Math.floor(随机(1, 6)); numArray.push(num); 柜台 } //返回 numArray[计数器 - 1]
//variables let counter = 0; let num = 0; let numArray = []; //For loop for (let i = 0; time >= i/2; i ) { seedRandom(counter, timeless = true); num = Math.floor(random(1, 6)); numArray.push(num); counter } //return numArray[counter - 1]设置变量后,循环从let i = 0开始,设置执行一次的第一个参数。然后,time >= i/2 确定循环执行的频率。以这种方式设置循环将意味着循环每秒执行两次,因为时间需要大于或等于 i 的一半。最后,第三个参数我将在循环执行后每次运行。在这种情况下,i的值增加1。
在文本图层的源文本属性中再次运行此表达式将每秒显示两次 1 到 5 之间的随机数。有关 for 循环的更多信息,请参阅我之前的文章。
当您
不知道循环需要执行多少次时,最好使用 while 循环。因此,我发现它们不能很好地处理涉及时间的表达式就像 for 循环做得很好,因为这会让你陷入那些讨厌的无限循环中。
那么什么时候应该我们使用while循环?
何时使用 while 循环记住所有这些,在这些条件下应该使用 while 循环:
我们看下面的代码:
//variables let counter = 0; let num = 0; let numArray = []; //For loop for (let i = 0; time >= i/2; i ) { seedRandom(counter, timeless = true); num = Math.floor(random(1, 6)); numArray.push(num); counter } //return numArray[counter - 1]在此实例中,while 循环检查 num 的当前值是否等于存储在 numArray 数组中的先前值。如果是,它会生成一个 1 到 5 之间的新随机数。只要 num 和数组中存储的前一个数字相同,循环就会执行。然而,一旦数字不匹配,while 循环就会结束,并且表达式可以自由地继续到下一行代码。
因为我
可能必须多次生成新的随机数,if语句在这里不起作用。
而且因为我不知道需要刷新随机数多少次,循环次数也是一个谜:所以 for 循环在这里也不好。
因此 while 循环是我最好的选择。它会根据我需要执行多次,直到它内部的参数为 false,只要 random() 函数生成一个与前一个不匹配的数字,这种情况就肯定会发生。
结论您觉得这有帮助吗?您有在项目中使用 while 循环的示例吗?我是不是搞错了什么?请给我留言并让我知道。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3