Показать сообщение отдельно
Старый 02.05.2012, 13:50
andrey_x вне форума Посмотреть профиль Отправить личное сообщение для andrey_x Посетить домашнюю страницу andrey_x Найти все сообщения от andrey_x
  № 9  
Ответить с цитированием
andrey_x
 
Аватар для andrey_x

Регистрация: May 2007
Адрес: Украина, Запорожье
Сообщений: 74
Отправить сообщение для andrey_x с помощью ICQ
Нужно было решить аналогичную задачу, только в обратную сторону - уменьшение FPS, т.е. "сжатие таймлайна". Немного дописал код, может кому пригодится:

Код AS1/AS2:
fl.outputPanel.clear ();
// скрипт для автоформата таймлайна
// для случая когда fps изменяется, а динамику надо сохранить
 
myFile = fl.getDocumentDOM();
myTimeline = myFile.getTimeline();
 
var newFPS= prompt("new FPS:");
myNewRate = (newFPS==null) ? myFile.frameRate : parseInt(newFPS);
 
myOldRate = myFile.frameRate;
myCoeffRate = myNewRate/myOldRate;
 
var addCoef;
 
for (i = 0; i < myTimeline.layers.length; i++){
	curLayer = myTimeline.layers[i];
	myTimeline.setSelectedLayers(i);
	for (j = 0; j < curLayer.frames.length; j++){
		curFrame = curLayer.frames[j];
		if(curFrame.duration==1) continue;
 
		if(myCoeffRate > 1) {
			addCoef = curFrame.startFrame==0 ? 1 : 0;		// если первый кадр - то добавляем 1 иначе нет
			addFr = Math.round(curFrame.duration * myCoeffRate - curFrame.duration) +addCoef;
			myTimeline.insertFrames(addFr, false, j);
			j += curFrame.duration - 1;
		} else if(myCoeffRate<1) {
			remFr = Math.round(curFrame.duration - curFrame.duration * myCoeffRate);
			myTimeline.removeFrames(curFrame.startFrame, curFrame.startFrame+remFr);
			j += curFrame.duration + 0;
		}		
	}
}
if (myCoeffRate!=1) myFile.frameRate = myNewRate;