我正在尝试在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
答案 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;
}
}