Полное раскрытие: я ненавижу циклы while. Мне потребовалось много времени, чтобы разобраться в них, но, кажется, я наконец понял их цель.
Начнем с того, что каждый раз, когда я пытался написать собственный цикл while, After Effects немедленно вылетал. Теперь, когда у меня есть немного больше знаний о том, что пошло не так, я хочу описать, что такое цикл while, когда его использовать и как можно включить его в выражения After Effects, не разрушая проект (не забывайте регулярно сохранять близкие).
Цикл while, как следует из названия, представляет собой цикл, который выполняется до тех пор, пока выражение истинно.
«Выполняется, пока выражение истинно» — это немного похоже на оператор if, не так ли?
if (timeЕсли вы добавите это выражение к свойству «Исходный текст» текстового слоя, вы обнаружите, что в течение первых 2 секунд вашей временной шкалы текст читается как «Текст включен», а после этого времени текст не отображается. Оператор if проверяет, истинно ли выражение, и если да, то он выполняет команду один раз и только один раз.
Однако, если вы измените его на это выражение, вы обнаружите, что After Effects почти сразу же аварийно завершает работу:
while (timeЭто связано с тем, что цикл while является циклом, поэтому он выполняет команду многократно, если утверждение истинно. Пока курсор находится в первых 2 секундах временной шкалы, цикл while будет повторяться бесконечно. Не совсем идеально и уж точно не то, чего мы пытались достичь! Важно убедиться, что ваш цикл while в конечном итоге станет ложным, чтобы избежать этих бесконечных циклов.
Подробнее об операторах if можно прочитать в моей предыдущей статье здесь.
Циклы while против циклов for
Хорошо, поэтому важно отметить, что не следует использовать циклы while, такие как операторы if. Но есть и другие типы циклов, которые мы можем использовать для создания выражений. Чем, например, цикл while отличается от цикла for?
Цикл for работает с тремя аргументами и идеален, когда вы знаете, сколько раз вам нужно повторять команды.
Возьмем этот пример и генерируем случайные числа:
//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, устанавливая первый аргумент, который выполняется один раз. Затем время >= i/2 определяет, как часто должен выполняться цикл. Установка цикла таким образом будет означать, что цикл выполняется дважды в секунду, поскольку время должно быть больше или равно половине i. Наконец, третий аргумент я буду запускать каждый раз после выполнения цикла. В этом случае значение i увеличивается на 1.
При повторном запуске этого выражения в свойстве «Исходный текст» текстового слоя случайное число от 1 до 5 будет отображаться дважды в секунду.
Для получения дополнительной информации о циклах for см. мою предыдущую статью здесь.
Цикл while лучше всего использовать, когда вы не знаете, сколько раз нужно будет выполнить цикл. Из-за этого я обнаружил, что он не очень хорошо работает с выражениями, требующими времени. Циклы типа for работают очень хорошо, так как это заманивает вас в ловушку этих надоедливых бесконечных циклов.
Итак, когда следует использовать циклы while?
Когда использовать циклы while
Учитывая все это, в следующих условиях следует использовать цикл while:
Недавно я нашел этому применение в After Effects, работая над своим проектом генератора случайных чисел.
Давайте посмотрим на следующий код:
//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)); //While loop inside of For loop while (num == numArray[counter - 1]) { num = Math.floor(random(1, 6)); } numArray.push(num); counter } //return numArray[counter - 1]
В этом случае цикл while проверяет, соответствует ли текущее значение num предыдущему значению, хранящемуся в массиве numArray. Если это так, он генерирует новое случайное число от 1 до 5. Цикл будет выполняться до тех пор, пока num и предыдущее число, хранящееся в массиве, совпадают. Однако, если числа не совпадают, цикл while завершается, и выражение может перейти к следующей строке кода.
Поскольку мне возможно, придется сгенерировать новое случайное число более одного раза, оператор if здесь не работает.
И поскольку я не знаю, сколько раз мне нужно будет обновить случайное число, количество циклов также остается загадкой: так что цикл for здесь тоже бесполезен.
Поэтому цикл while — мой лучший вариант. Он будет выполняться столько раз, сколько мне нужно, пока аргумент внутри него не станет ложным, что обязательно произойдет, пока функция random() сгенерирует число, не соответствующее предыдущему.
В заключение, циклы while, вероятно, будут необычным инструментом в вашем поясе выражений After Effects. Однако их полезно изучить, например, в тех случаях, когда обычные подозреваемые могут оказаться непригодными.
Было ли это полезно для вас? Есть ли у вас пример использования цикла while в вашем проекте? Я понял что-то не так? Пожалуйста, оставьте мне комментарий и дайте мне знать.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3