完全開示: 私は while ループが嫌いです。理解するのに長い時間がかかりましたが、ようやくその目的が理解できた気がします。
最初は、独自の while ループを作成しようとするたびに、After Effects がすぐにクラッシュしていました。何が問題だったのかについてもう少し理解できたので、while ループとは何か、いつ使用するか、プロジェクトをクラッシュさせることなく After Effects エクスプレッションに組み込む方法について書きたいと思います (定期的に保存することを忘れないでください)。皆さん)。
while ループは、名前が示すように、式が true である限り実行されるループです。
「式が true である限り実行する」 - これは if ステートメントに少し似ていますね?
if (timeこの式をテキスト レイヤーのソース テキスト プロパティに追加すると、タイムラインの最初の 2 秒間はテキストが「テキスト オン」と表示され、その後はテキストが表示されないことがわかります。 if ステートメントは式が true かどうかをチェックし、true であればコマンド 1 回 を 1 回だけ実行します。
ただし、これを this 式に変更すると、After Effects がほぼ即座にクラッシュすることがわかります。
while (timeこれは、while ループ がループ であるため、ステートメントが true の場合、コマンド を繰り返し 実行します。カーソルがタイムラインの最初の 2 秒間にある限り、while ループは 無限に ループします。まったく理想的ではありませんし、私たちが達成しようとしていたものでもありません。このような無限ループを避けるために、while ループが最終的に false になることを確認することが重要です。
if ステートメントの詳細については、以前の記事を参照してください。while ループと for ループ
わかりました。if ステートメントのような while ループを使用しないように注意することが重要です。ただし、式を作成するために使用できるループの種類は他にもあります。たとえば、while ループは for ループとどう違うのですか?
for ループは 3 つの引数で動作し、
コマンドをループする回数がわかっている場合に最適です。
この例では、乱数を生成します://変数 カウンタ = 0 とします。 数値 = 0 とします。 numArray = []; とします。 //forループ for (let i = 0; time >= i/2; i ) { シードランダム(カウンター、タイムレス = true); num = Math.floor(random(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 で始まり、once を実行する最初の引数を設定します。次に、time >= i/2 により、ループを実行する頻度が決まります。ループをこのように設定すると、時間は i の半分以上である必要があるため、ループが 1 秒ごとに 2 回実行されることになります。最後に、3 番目の引数 i は、ループの実行後に everytime を実行します。この場合、i の値は 1 増加します。
テキスト レイヤーのソース テキスト プロパティでこの式を再度実行すると、1 から 5 までの乱数が 1 秒ごとに 2 回表示されます。for ループの詳細については、ここで以前の記事を参照してください。
while ループは、
ループを何回実行する必要があるかわからない場合に使用するのが最適です。このため、時間が関係する式ではうまく機能しないことがわかりました。 for ループなどは非常にうまく機能しますが、そうすると厄介な無限ループに陥ってしまいます。
それでは、while ループをいつ使用すべきでしょうか? while ループを使用する場合
これらすべてを念頭に置いて、while ループは次の状況で使用する必要があります:
式を複数回実行する必要があります
次のコードを見てみましょう:
//変数
カウンタ = 0 とします。
数値 = 0 とします。
numArray = []; とします。
//forループ
for (let i = 0; time >= i/2; i ) {
シードランダム(カウンター、タイムレス = true);
num = Math.floor(random(1, 6));
//For ループ内の While ループ
while (num == numArray[counter - 1]) {
num = Math.floor(random(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)); //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]新しい乱数を複数回生成する必要がある可能性があるため
、ここでは if ステートメントは機能しません。 そして、
乱数を何回更新する必要があるかわからないため、ループの数も謎です。つまり、ここでも for ループは役に立ちません。 したがって、while ループが私の最良の選択肢です。これは、内部の引数が false になるまで
必要なだけ実行されます。これは、random() 関数が前の値と一致しない数値を生成する限り、確実に実行されます。 結論
これは役に立ちましたか?プロジェクトで while ループを使用する例はありますか?何か間違ったことをしましたか?コメントを残してお知らせください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3