linear()を設定したいのですが・・・
var a = thisComp.layer("調整レイヤー 1").effect("linear").name; //linear
var b = thisComp.layer("調整レイヤー 1").effect("ease").name; //ease
var c = thisComp.layer("調整レイヤー 1").effect("easeIn").name; //easeIn
var d = thisComp.layer("調整レイヤー 1").effect("easeOut").name; //easeOut
var arry = [a,b,c,d];
var setId;
for (i = 0 ; i<arry.length; i++){
if (thisComp.layer("調整レイヤー 1").effect(arry[i])("チェックボックス") ==1){
setId=thisComp.layer("調整レイヤー 1").effect(arry[i]).name;
break;
}else{
setId=thisComp.layer("調整レイヤー 1").effect(arry[0]).name;
}
}
setId+"(time,0,2,0,100);"
これをソーステキストに書くと
linear(time,0,2,0,100);
で返ってくるのですが、不透明に
var a = thisComp.layer("調整レイヤー 1").effect("linear").name; //linear
var b = thisComp.layer("調整レイヤー 1").effect("ease").name; //ease
var c = thisComp.layer("調整レイヤー 1").effect("easeIn").name; //easeIn
var d = thisComp.layer("調整レイヤー 1").effect("easeOut").name; //easeOut
var arry = [a,b,c,d];
var setId;
for (i = 0 ; i<arry.length; i++){
if (thisComp.layer("調整レイヤー 1").effect(arry[i])("チェックボックス") ==1){
setId=thisComp.layer("調整レイヤー 1").effect(arry[i]).name;
break;
}else{
setId=thisComp.layer("調整レイヤー 1").effect(arry[0]).name;
}
}
setId(time,0,2,0,100);
で書くとエラーが起きます・・・パラメーターって変数にしちゃだめなんでしょうか・・・
.nameが必要じゃないとこにあったりしましたが、それも直したのですがダメでした。
やはりパラメーターが引っかかっているのかと思います。
解決策
さらにswitchを追加しました。
本来はポジションに適用させる予定でしたので、そのソースになっています。
それでは解決出来たソースコードです。
a = thisComp.layer("control").effect("linear");
b = thisComp.layer("control").effect("ease");
c= thisComp.layer("control").effect("easeIn");
d = thisComp.layer("control").effect("easeOut");
var array = [a,b,c,d];
for (i = 0 ; i <array.length; i++){
if (array[i]("チェックボックス") == 1){
switch( array[i].name ) {
case "linear":linear(time,0,1,[0,0],[1920,1080])
break;
case "ease":ease(time,0,1,[0,0],[1920,1080])
break;
case "easeIn":easeIn(time,0,1,[0,0],[1920,1080])
break;
case "easeOut":easeOut(time,0,1,[0,0],[1920,1080])
break;
}
break;
}
else if (array[i]("チェックボックス") == 0){
"何も選択されていませんの処理"
}
}
解説(伝えるのが下手ですみません。)
arrayの中にはチャックボックスのどれがオンになっている判定する為に
エフェクトのチェックボックスのオブジェクトが入っています。
まずはfor文でarrayの中身を全て対象にします。
for (i = 0 ; i <array.length; i++){}
その中にチェックボックスがオンの場合ブレーク
if (array[i]("チェックボックス") == 1){break;}
switchでチェックボックスがオンの時のチェックボックスの名前を参照させ、エクスプレッションを適させました。
switch( array[i].name ) {
case "linear":linear(time,0,1,[0,0],[1920,1080])
break;
case "ease":ease(time,0,1,[0,0],[1920,1080])
break;
case "easeIn":easeIn(time,0,1,[0,0],[1920,1080])
break;
case "easeOut":easeOut(time,0,1,[0,0],[1920,1080])
break;
}
はたしてこれがスマートなのかもわからない
何か無駄に変な事をしているような気がしますが、プログラムの理解を深めるためにも勉強になりました(笑)
追加
さらに先程のソースだとチェックボックスが2個以上アクティブな時の処理は無かったので追加しました。
チャックボックスの表記をマッチネームに変更しています。
Fade = timeToFrames(thisComp.layer("control").effect("fade /s")("ADBE Slider Control-0001"));
Dur =timeToFrames(thisComp.layer("control").effect("Dur /s")("ADBE Slider Control-0001"));
t=timeToFrames(time);
a = thisComp.layer("control").effect("linear");
b = thisComp.layer("control").effect("ease");
c= thisComp.layer("control").effect("easeIn");
d = thisComp.layer("control").effect("easeOut");
var array = [a,b,c,d];
var onArray = [];
for (i = 0 ; i <array.length; i++){
if (array[i]("ADBE Checkbox Control-0001") == 1){
onArray.push(array[i])
}
}
for (i = 0 ; i <array.length; i++){
if ((array[i]("ADBE Checkbox Control-0001") == 1) && (onArray.length == 1)){
switch( array[i].name ) {
case "linear":;linear(t,0,Fade,100,0);
break;
case "ease":;ease(t,0,Fade,100,0);
break;
case "easeIn":easeIn(t,0,Fade,100,0);
break;
case "easeOut":easeOut(t,0,Fade,100,0);
break;
}
break;
}
else{
[value]
}
}
if (t > Fade+Dur){
for (i = 0 ; i <array.length; i++){
if ((array[i]("ADBE Checkbox Control-0001") == 1) && (onArray.length == 1)){
switch( array[i].name ) {
case "linear":;linear(t,Fade+Dur,(Fade*2)+Dur,0,100);
break;
case "ease":;ease(t,Fade+Dur,(Fade*2)+Dur,0,100);
break;
case "easeIn":easeIn(t,Fade+Dur,(Fade*2)+Dur,0,100);
break;
case "easeOut":easeOut(t,Fade+Dur,(Fade*2)+Dur,0,100);
break;
}
break;
}
else{
[value]
}
}
}