簡體   English   中英

Adobe ExtendScript中的For循環

[英]For loop in Adobe ExtendScript

我在“ setEase”函數中的for循環不會增加“ i”

function storeKeyframes(){
            var properties      = app.project.activeItem.selectedProperties;
            var activeProperty  = null;
            var keySelection    = null;
            var curKey          = null;
            var curKeyTime      = null;
            var curKeyIndex     = null;

            var theEase         = new KeyframeEase(0 , slider_1_slider.value);

            for (var i = 0; i < properties.length; i++){
                activeProperty = properties[i];
                setEase();
            }

            function setEase(){
                for (var i = 0; i < activeProperty.selectedKeys.length ; i++){
                    keySelection    = activeProperty.selectedKeys;
                    curKey          = keySelection[i];
                    curKeyTime      = activeProperty.keyTime(curKey);
                    curKeyIndex     = activeProperty.nearestKeyIndex(curKeyTime);

                    activeProperty.setInterpolationTypeAtKey(curKeyIndex, KeyframeInterpolationType.BEZIER, KeyframeInterpolationType.BEZIER);
                    activeProperty.setTemporalEaseAtKey(curKeyIndex,theEase, theEase);
                }
            }
        }

我只是不知道為什么。 我想念什么嗎?

我嘗試了您的代碼,但實際上“ i”並沒有增加,但是對我來說,原因是出現了錯誤。

發生錯誤的主要原因是setTemporalEaseAtKey()的第二個和第三個參數應該是KeyframeEase的數組 ,而不僅僅是KeyframeEase(請參見腳本指南)。 另一個原因是activeProperty不必是實際的Property,因此查詢activeProperty.selectedKeys.length將引發錯誤。

附帶一提,您所稱的curKeyIndex實際上與curKey相同,因此您不需要NearestKeyIndex東西。 以下代碼對我有用:

function storeKeyframes(){
    var comp = app.project.activeItem;
    if (!comp || comp.typeName !== "Composition") return;
    var properties = comp.selectedProperties;
    var i, I=properties.length;
    var ease1 = new KeyframeEase(0,100);

    for (i=0; i<I; i++){
        if (properties[i] instanceof Property) setEase(properties[i], ease1);
        };
    };
function setEase(property, ease1){
    var ease = property.propertyValueType===PropertyValueType.Two_D ? [ease1, ease1] : (property.propertyValueType===PropertyValueType.Three_D ? [ease1, ease1, ease1] : [ease1]);
    var keySelection = property.selectedKeys;
    var i, I=keySelection.length;
    for (i=0; i<I; i++){
        property.setInterpolationTypeAtKey(keySelection[i], KeyframeInterpolationType.BEZIER, KeyframeInterpolationType.BEZIER);
        property.setTemporalEaseAtKey(keySelection[i], ease, ease);
        };
    };
storeKeyframes();

這對我有用。 看一下ESTK的控制台。 我建議將您的activeProperty傳遞給setEase函數。 因此,您可以保持示波器清潔。
另外最好不要使用相同的迭代器。

function main() {
  storeKeyframes();

}
function storeKeyframes() {
  var properties = app.project.activeItem.selectedProperties;
  for (var i = 0; i < properties.length; i++) {
    activeProperty = properties[i];
    $.writeln(i + " in storeKeyframes");
    setEase(activeProperty);
  }
  function setEase(ap) {
    for (var j = 0; j < ap.selectedKeys.length; j++) {
      $.writeln(j + " in setEase");
    }
  }
}
main();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM