Сразу не будем углубляться в тяжёлый код, начнём с чего-то лёгкого. Приступим.
var a = "This is a simple string of text";
alert(a.length);
AE выдаст количество символов заключённой в переменную "а". Теперь создадим слово, которое будет являться объектом поиска.
var a = "This is a simple string of text";
var b = "text";
alert(a.indexOff(b));
AE выдаст порядковй номер символа, когда начинается наш объект поиска. Если мы будем искать несуществующее слово, допусти "cat", то AE выдаст значение -1, что значит такого не существует. Для тех кто постоянно забывает, что за фигню мне АЕ выкидывает(-1), можем сделать следующее
var a = "This is a simple string of text";
var b = "cat";
alert(a.indexOff(b) == (-1));
В результате получим "true". Также есть второй способ по поиску.
alert(a.match(b));
Если объект найден, то АЕ выдаст наш поисковый объект, если не найден, то АЕ выдаст null
Поработаем с предыдущем примером. Нам нужно заменить в переменной "а" все "simple" на "happy". Делается это так.
var a = "This is a simple string of text";
var b = "happy";
alert(a.replace(new RegExp("simple", "g"), b));
Выражение говорит следующее: зaмени все simple глобально на happy
Также можем вывести в alert определённое количество символов заключённых в переменную.
var a = "This is a simple string of text";
alert(a.substr(0, 4));
Мы задали показать символы начиная с самого начала и на 4 вперёд. Аналогично с 10 символа и на 4 вперёд - alert(a.substr(10, 4)); Очень полезно знать , что указывая отрицательное число (-5), то счёт будет идти с конца
Следующий метод split() будет разделять вашу переменную в указанном месте пополам на массивы.
var a = "First.Second";
alert(a.split("."));
АЕ нам выдаст значение первого и второго массива через запятую(Если точек больше чем одна, то и массивов будет такое же количество)
var a = "First.Second";
alert(a.split(".")[1]);
В данном случае АЕ нам выдаст значение только второго массива
Некоторые полезные штуки. Сделать все буквы заглавными
var a = "Hello World";
alert(a.toUpperCase());
Теперь все буквы маленькими.
var a = "Hello World";
alert(a.toLowerCase());
Чаще всего на практике мы будем делать, что-то такое.
var pic = "myPicture.jpg";
var action = pic.split(".");
var result = action[1].toUpperCase();
alert(result);
Теперь будем прописывать кейфрэймы через ExtendScript:
var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");
var fourKeys=4;
app.beginUndoGroup("Keys");
for(var k=0; k<fourKeys; k++){
prop1.addKey(4);
}
app.endUndoGroup();
Что мы здесь сделали так это прописали доступ к параметру Position объекта. Следующие создали undoGroup, чтобы можно было легко вернуть действия в начальный вид. В группе прописали цикл for, который создаёт 4 кейфрейма на 0, 1, 2, 3 секундах. Время композиции всегда в секундах, если Вам удобно во фреймах работать, то нужно перевести секунды во фреймы.
Но в данном случае мы никак не анимировали наш солид мы просто создали 4 кейфрейма. Теперь попробуем прописать движение солида:
var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");
var fourKeys=4;
var addTheseKeys = new Array(1, 2, 3,4);
var keyValues = new Array([120,120], [200,200], [80,80], [150,150]);
app.beginUndoGroup("Keys");
for(var k=0; k<fourKeys; k++){
prop1.setValueAtTime(addTheseKeys[k], keyValues[k]);
}
app.endUndoGroup();
function readDocument(inputDoc, linesToSkip){
var curDoc = new File(inputDoc);
if (curDoc.exists){
var contentAry = new Array();
curDoc.open("r") // создаём новый файл. На основе выбранного. Проверяем существует ли он, если да, то создаём новый массив и читаем наш файл
while(!curDoc.eof){ // eof - EndOfFile
contentAry[contentAry.length] = curDoc.readln();
} // до тех пор пока мы не находимся в коцце файла, то заносим в массив каждые строки
curDoc.close();
} // - в данном случае мы написали функцию, которая будет открывать файл, читать его и закрывать. Это всё будет происходить за сценой, мы этого не увидим
contentary.splice(0, lineToSkip);
var contentList = contentAry.join("_ART_").toString.replace(new RegExp("_ART_", "g"), "r"); // так как одна строка у нас является одним значением в массиве, то вместо запятое вставляем новую строку
contentAry = contentAry;
return{
'contentAry': contentAry;
'contentList': contentList;
} // так как в самом начале мы прописали ...(newFile, 0).contentAry , то значит мы запрашиваем в виде массива. Но если мы прописали бы вот так :...(newFile, 0).contentList, то мы бы запросили всё содержимое текстового файла в виде списка
}
На этом этапе остановимся, всё желательно переварить и понять. Так как это функция, то её очень удобно свернуть и будет у нас видна толкько одна вот такая строка :
function readDocument(inputDoc, linesToSkip){
Теперь в любой момент когда нам нужно открыть файл, прочитать его и занести содержимоев массив, то просто вставляем эту функцию и всё
var a = "This is a simple string of text";
alert(a.length);
AE выдаст количество символов заключённой в переменную "а". Теперь создадим слово, которое будет являться объектом поиска.
var a = "This is a simple string of text";
var b = "text";
alert(a.indexOff(b));
AE выдаст порядковй номер символа, когда начинается наш объект поиска. Если мы будем искать несуществующее слово, допусти "cat", то AE выдаст значение -1, что значит такого не существует. Для тех кто постоянно забывает, что за фигню мне АЕ выкидывает(-1), можем сделать следующее
var a = "This is a simple string of text";
var b = "cat";
alert(a.indexOff(b) == (-1));
В результате получим "true". Также есть второй способ по поиску.
alert(a.match(b));
Если объект найден, то АЕ выдаст наш поисковый объект, если не найден, то АЕ выдаст null
Поработаем с предыдущем примером. Нам нужно заменить в переменной "а" все "simple" на "happy". Делается это так.
var a = "This is a simple string of text";
var b = "happy";
alert(a.replace(new RegExp("simple", "g"), b));
Выражение говорит следующее: зaмени все simple глобально на happy
Также можем вывести в alert определённое количество символов заключённых в переменную.
var a = "This is a simple string of text";
alert(a.substr(0, 4));
Мы задали показать символы начиная с самого начала и на 4 вперёд. Аналогично с 10 символа и на 4 вперёд - alert(a.substr(10, 4)); Очень полезно знать , что указывая отрицательное число (-5), то счёт будет идти с конца
Следующий метод split() будет разделять вашу переменную в указанном месте пополам на массивы.
var a = "First.Second";
alert(a.split("."));
АЕ нам выдаст значение первого и второго массива через запятую(Если точек больше чем одна, то и массивов будет такое же количество)
var a = "First.Second";
alert(a.split(".")[1]);
В данном случае АЕ нам выдаст значение только второго массива
Некоторые полезные штуки. Сделать все буквы заглавными
var a = "Hello World";
alert(a.toUpperCase());
Теперь все буквы маленькими.
var a = "Hello World";
alert(a.toLowerCase());
Чаще всего на практике мы будем делать, что-то такое.
var pic = "myPicture.jpg";
var action = pic.split(".");
var result = action[1].toUpperCase();
alert(result);
Теперь будем прописывать кейфрэймы через ExtendScript:
var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");
var fourKeys=4;
app.beginUndoGroup("Keys");
for(var k=0; k<fourKeys; k++){
prop1.addKey(4);
}
app.endUndoGroup();
Что мы здесь сделали так это прописали доступ к параметру Position объекта. Следующие создали undoGroup, чтобы можно было легко вернуть действия в начальный вид. В группе прописали цикл for, который создаёт 4 кейфрейма на 0, 1, 2, 3 секундах. Время композиции всегда в секундах, если Вам удобно во фреймах работать, то нужно перевести секунды во фреймы.
Но в данном случае мы никак не анимировали наш солид мы просто создали 4 кейфрейма. Теперь попробуем прописать движение солида:
var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");
var fourKeys=4;
var addTheseKeys = new Array(1, 2, 3,4);
var keyValues = new Array([120,120], [200,200], [80,80], [150,150]);
app.beginUndoGroup("Keys");
for(var k=0; k<fourKeys; k++){
prop1.setValueAtTime(addTheseKeys[k], keyValues[k]);
}
app.endUndoGroup();
Мы создали четыре переменных с координатами. И в цикле прописали применить кейфреймы к объекту. Если у Вас много лэеров, то цикл может занять больше времени для обработки. В этом случае вместо цикла for используем аналогичную функцию:
setValuesAtTimes(addTheseKeys, keyValues);
Результат такой же.
Чтобы вывести данные кейфреймов напишем вот такой скрипт:
var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");
var keyLength = prop1.numKeys;
var vals = new Array();
app.beginUndoGroup("Keys");
for(var k=0; k<fourKeys; k++){
vals[vals.length] = prop1.keyValue(k+1);
}app.endUndoGroup();
alert(vals);
Сейчас разберём большую тему это чтение текстового файла с помощью ExtendScript и перенесение содержимого текстового файла в After Effects.
var newFile = File.openDialog("Choose File to Read"); // - функция, которая вызывает окно для того чтобы выбрать файл
if(newFile != null){
var a = readDocumen(newFile, 0).contentAry
// - Если файл не равен нулю(тоесть если он существует), то выполняется чтение действующего файла(newFile) и пропускается 0 строчек, тоесть читается весь файл. В итоге мы вызываем две величины
app.beginUndoGroup("Import Text");
createNewComps(a);
app.endUndoGroup();
}
setValuesAtTimes(addTheseKeys, keyValues);
Результат такой же.
Чтобы вывести данные кейфреймов напишем вот такой скрипт:
var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");
var keyLength = prop1.numKeys;
var vals = new Array();
app.beginUndoGroup("Keys");
for(var k=0; k<fourKeys; k++){
vals[vals.length] = prop1.keyValue(k+1);
}app.endUndoGroup();
alert(vals);
Сейчас разберём большую тему это чтение текстового файла с помощью ExtendScript и перенесение содержимого текстового файла в After Effects.
var newFile = File.openDialog("Choose File to Read"); // - функция, которая вызывает окно для того чтобы выбрать файл
if(newFile != null){
var a = readDocumen(newFile, 0).contentAry
// - Если файл не равен нулю(тоесть если он существует), то выполняется чтение действующего файла(newFile) и пропускается 0 строчек, тоесть читается весь файл. В итоге мы вызываем две величины
app.beginUndoGroup("Import Text");
createNewComps(a);
app.endUndoGroup();
function readDocument(inputDoc, linesToSkip){
var curDoc = new File(inputDoc);
if (curDoc.exists){
var contentAry = new Array();
curDoc.open("r") // создаём новый файл. На основе выбранного. Проверяем существует ли он, если да, то создаём новый массив и читаем наш файл
while(!curDoc.eof){ // eof - EndOfFile
contentAry[contentAry.length] = curDoc.readln();
} // до тех пор пока мы не находимся в коцце файла, то заносим в массив каждые строки
curDoc.close();
} // - в данном случае мы написали функцию, которая будет открывать файл, читать его и закрывать. Это всё будет происходить за сценой, мы этого не увидим
contentary.splice(0, lineToSkip);
var contentList = contentAry.join("_ART_").toString.replace(new RegExp("_ART_", "g"), "r"); // так как одна строка у нас является одним значением в массиве, то вместо запятое вставляем новую строку
contentAry = contentAry;
return{
'contentAry': contentAry;
'contentList': contentList;
} // так как в самом начале мы прописали ...(newFile, 0).contentAry , то значит мы запрашиваем в виде массива. Но если мы прописали бы вот так :...(newFile, 0).contentList, то мы бы запросили всё содержимое текстового файла в виде списка
}
На этом этапе остановимся, всё желательно переварить и понять. Так как это функция, то её очень удобно свернуть и будет у нас видна толкько одна вот такая строка :
function readDocument(inputDoc, linesToSkip){
Теперь в любой момент когда нам нужно открыть файл, прочитать его и занести содержимоев массив, то просто вставляем эту функцию и всё
No comments:
Post a Comment