今回はプロジェクト内に、同じ名前のフォルダが存在しない場合のみ、フォルダを作成してみます。このような場合、プログラムでは「条件判断」を行って処理します。以下のスクリプトは日本百名山という名前のフォルダが存在しない場合のみ、日本百名山という名前のフォルダを作成します。
var flag = false;
for(var i=1; i<=app.project.items.length; i++){
if (app.project.items[i].name == “日本百名山”) {
flag = true;
}
}
if (flag == false){
app.project.items.addFolder(“日本百名山”);
}
for()などは前回やりましたので解説は省きます。JavaScriptでは条件判断を行うのにはif()命令を使います。このif()の中に条件式を書きます。この条件を満たした場合のみ、{と}の間に書かれた命令を実行します。
まず、日本百名山という名前があるかどうかは以下の部分です。
if (app.project.items[i].name == “日本百名山”)
プロジェクト内にある項目の名前はフォルダやコンポジション、フッテージまで全て含めてapp.project.items[番号].nameとして知ることができます。番号は1から始まります。
for()と組み合わせて、プロジェクト内にある項目の数だけ順番に名前を調べていくわけです。プロジェクトの項目数はapp.project.items.lengthで知ることができます。
もし、作成しようとするフォルダ名と同じ名前のものがあれば変数flagにtrueを入れます。
for()で全部名前をチェックし終わったら、最後にif()を使って変数flagがtrueかどうか調べます。trueでなくfalseならば、同じ名前のフォルダがないので、addFolder()でフォルダを作成します。
これで完璧です。と行きたいところですが、コンポジションやフッテージに同じ作成するフォルダと同じ名前があると、うまく作成されません。というよりもフォルダが作成されません。
これは、プロジェクト内にある項目の種類に関係なく名前だけで判別しているためです。フォルダかどうかの種類も調べてから作成しないと駄目です。
プロジェクト内にある項目の種類は以下のスクリプトで知ることができます。
for(var i=1; i<=app.project.items.length; i++){
alert(app.project.items[i].typeName);
}
フォルダの場合は「フォルダ」と表示されます。コンポジションの場合は「コンポジション」です。そこで、以下のようにif()を工夫して両方の条件を満たした場合に処理するようにします(typeNameで日本語でフォルダの文字かどうか判断していますが、Scripting Guideにあるように”Folder”であっても正しく動作します)。
var flag = false;
for(var i=1; i<=app.project.items.length; i++){
if ((app.project.items[i].typeName == “フォルダ”) && (app.project.items[i].name == “日本百名山”)) {
flag = true;
}
}
if (flag == false){
app.project.items.addFolder(“日本百名山”);
}
フォルダの作成だけでなくコンポジションの作成も同様の方法を使うことができます。
【第五回 終わり】
【おまけ解説】
さて、ここからは今回のスクリプトの解説になります。
さて、ここからは今回のスクリプトの解説になります。
最初にvar flag = false;とありますが、これは変数flagにfalseを入れるという意味になります。このfalseとtrueですが、プログラムでは非常に多く使われます。これはYesかNoか?、0か1か?といった二者択一の場合に使われます。falseは偽、trueは真と記述されることもあります。また、この時の変数は「フラグ変数」と呼ばれることもあります。
条件判断を行うのはif()ですが、()の中には条件式を書きます。この条件式には以下のようなものがあります。
== 左と右の内容/値が同じ
!= 左と右の内容/値が異なる
< 左の値が右の値より小さい
<= 左の値が右の値と等しいか小さい
> 左の値が右の値より大きい
>= 左の値が右の値より大きい
1つの条件であれば、これで十分です。が、今回のように複数の条件を満たさなければならないことがあります。このような場合、以下の記号を使って条件を判断します。
<= 左の値が右の値と等しいか小さい
> 左の値が右の値より大きい
>= 左の値が右の値より大きい
1つの条件であれば、これで十分です。が、今回のように複数の条件を満たさなければならないことがあります。このような場合、以下の記号を使って条件を判断します。
●条件式1と条件式2の条件を満たした場合に処理
if ((条件式1) && (条件式2))
●条件式1か条件式2のどちらかを満たした場合に処理
if ((条件式1) || (条件式2))
じゃあ、3つの条件を満たす場合にはどうなるのか?というと以下のようになります。
if ((条件式1) && (条件式2) && (条件式3))
if()とfor()を組み合わせることで、プログラムに複雑な処理を手軽に行わせることができます。だいたい、ここまででプログラムの基本的な「代入」「繰り返し」「条件判断」をやりました。ほとんどの事は、これらの組み合わせでしかありません。
何ができるかはAfterEffectsのScripting Guideを見て下さい。ただし、プログラムを使えばAfterEffectsの全てを制御できるわけではありません。できることもあれば、できないことも結構あるのです。
新着記事 : AfterEffectsをスクリプトで制御(5) – フォルダが存在しない場合のみフォルダを作成する – http://tinyurl.com/dyu5j9
新着記事 : AfterEffectsをスクリプトで制御(5) – フォルダが存在しない場合のみフォルダを作成する – http://tinyurl.com/dyu5j9