After Effects表达式(如果图层是CompItem)

时间:2018-10-29 21:47:02

标签: after-effects

我正在尝试在After Effects表达式下面的第5行进行一些修改。第5行检查该图层是否可见并处于活动状态,但是我尝试添加额外的检查,以确保该图层不应该是comp项目。 (在我的项目中,图层是文本图层或图像图层,我认为图像图层表示comp项目)。以某种方式确保该层不应该是comp项的“ instanceof”方法不起作用。谢谢,请告知如何解决此错误。

   txt = "";
   for (i = 1; i <= thisComp.numLayers; i++){
      if (i == index) continue;
         L = thisComp.layer(i);
           if ((L.hasVideo && L.active) && !(thisComp.layer(i) instanceof CompItem)){
          txt = i + " / " + thisComp.numLayers + " / " + L.text.sourceText.split(" ").length;
       break;
       }
    }
    txt

2 个答案:

答案 0 :(得分:1)

您正在混合表达式和Extendscript。 compItem类是Extendscript类,我很确定它不适用于表达式。

我建议您阅读以下文档:https://helpx.adobe.com/after-effects/user-guide.html?topic=/after-effects/morehelp/automation.ug.js

答案 1 :(得分:1)

虽然compItem仅在ExtendScript中可用,但是您实际上可以检查{my_layer}。source对象中可用的属性。

这是一个可行的示例(AE CC2018,CC2019和CC2020):layer_is_comp.aep

该表达式将类似于:

function isComp (layer)
{
  try
  {
    /*
    - used for when the layer doesn't have a ['source'] key or layer.source doesn't have a ['numLayers'] key
    - ['numLayers'] is an object key available only for comp objects so it's ok to check against it
    - if ['numLayers'] is not found the expression will throw an error hence the try-catch
    */
    if (layer.source.numLayers) return true;
    else return false;
  }
  catch (e)
  {
    return false;
  }
}

try
{
  // prevent an error when no layer is selected
  isComp(effect("Layer Control")(1)) ? 'yes' : 'no';
}
catch (e)
{
  'please select a layer';
}

对于第二个问题,可以通过验证图层是否具有text.sourceText属性来检查该图层是否为TextLayer。

示例:

function isTextLayer (layer)
{
  try
  {
    /*
    - prevent an expression error if the ['text'] object property is not found
    */
    var dummyVar = layer.text.sourceText;

    return true;
  }
  catch (e)
  {
    return false;
  }
}