В итоге я сделал именно это, потому что хотел выяснить, как переместить все выбранные ключевые кадры в точку воспроизведения с помощью сочетания клавиш. Я не мог выяснить, как симулировать щелчок мышью и перетаскивание (если кто-нибудь знает, потому что это может быть более тривиальным ...), но я закончил тем, что создал скрипт, который сначала записывает все ключевые кадры, затем удаляет их все, а затем заменяет их смещенное значение.
И да, это включает в себя создание объекта "ключевой кадр" и сохранение их в массиве. Порядок shiftKeyFrames предполагает, что вы записали ключевые кадры в массив в порядке слева направо.
var records = arrayOfkeyFrameObjects;
function shiftKeyFrames(records, dif){//shifts keyFrames by dif
for(i= records.length - 1; i >= 0 ; i--){ //Remove original keyframes.
records[i].property.removeKey(records[i].index);
}
for(i=0; i < records.length;i++){
records[i].replacementIndex = records[i].property.addKey(roundFrame(records[i].time+dif)); //Adds a keyframe with the time difference, rounded to the nearest frame, and stores the replacement index.
records[i].property.setValueAtKey(records[i].replacementIndex,records[i].value); //Sets the value of the new keyFrame
}
for(i=0; i < records.length;i++){
records[i].property.setSelectedAtKey(records[i].replacementIndex, true); //Re-selects all the created keyframes.
}
}
function roundFrame(time){
return Math.round(comp.frameRate*time)/comp.frameRate;
}
function keyFrame(property, index){
this.property = property;
this.index = index;
this.time = property.keyTime(index);
this.value = property.keyValue(index);
this.replacementIndex;
}
}());