LoginSignup
0
1

More than 5 years have passed since last update.

AE エクスプレッションのパラメーターを変数にした時に起こるエラー 解決済み

Last updated at Posted at 2018-06-06

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の中にはチャックボックスのどれがオンになっている判定する為に
エフェクトのチェックボックスのオブジェクトが入っています。
キャプチャ.JPG

まずは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]
        }
}
}


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1