Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.03.2008, 15:33
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 1  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
По умолчанию Автоперевестка таймлайна при смене fps

Например, когда мы эмбедим видео на таймлайн, то видео автоматически синхронизируется с таймлайном исходя из установленного fps.

Вопрос: можно ли как-то динамически переверстать таймлайн (растянуть/сжать простейшие анимации) при смене fps? Или каждый раз это необходимо делать руками?

Пример:
Есть флешка с fps=10 и 50-ью кадрами (1-й и 50-й - ключевые в анимации движения).
Если менять fps на 20, то анимация движения должна быть соответственно из 100 кадров (чтобы сохранить динамику анимации) и 50-й ключевой кадр должен стать 100-м.

Старый 12.03.2008, 17:32
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Написать JSFL скрипт, который будет переставлять ключевые кадры.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 12.03.2008, 19:38
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 3  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Что-то не могу найти, как получить тип фрейма (ключевой/не ключевой)?

Старый 12.03.2008, 19:51
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
У frame есть свойство startFrame, которое показывает начальный фрейм для данной последовательности.
Код:
fl.outputPanel.clear ();
var frameArray = fl.getDocumentDOM().getTimeline().layers[0].frames;
var len = frameArray.length;
for (i = 0; i < len; i++) {
	if (i == fl.getDocumentDOM().getTimeline().layers[0].frames[i].startFrame) {
		fl.trace(i + " keyframe");
	} else {
		fl.trace(i);
	}
}
пример для однослойного fla
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 12.03.2008, 20:07
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 5  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Понятно...
Я думал есть специальное свойство, а так я уже сделал нечто подобное
(для любого числа слоев):

Код:
fl.outputPanel.clear ();

myFile=fl.getDocumentDOM()
myTimeline=myFile.getTimeline()

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]
		fl.trace(i+" "+j+" "+curFrame.duration+" "+curLayer.frames.length+" keyframe")
		j+=curFrame.duration-1	
	}
}
add:
А где математический аппарат? Мне, например надо округлять числа: из 2.8 сделать 3. Как?
add2: вроде нашел - все просто, как валенок: Math.round()

add3:
вроде вышло

Код:
// скрипт для автоформата таймлайна
// для случая когда fps учащается до значения myNewRate
// а динамику анимации надо сохранить

myFile=fl.getDocumentDOM()
myTimeline=myFile.getTimeline()

myNewRate=18 // здесь поставить значение желаемого fps
myOldRate=myFile.frameRate
myCoeffRate=myNewRate/myOldRate

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]
		add=Math.round(curFrame.duration*myCoeffRate-curFrame.duration)
		myTimeline.insertFrames(add, false, j);
		j+=curFrame.duration-1
	}
}
myFile.frameRate=myNewRate


Последний раз редактировалось chingachgoog; 12.03.2008 в 20:37.
Старый 23.06.2008, 00:24
Andrew_J вне форума Посмотреть профиль Отправить личное сообщение для Andrew_J Найти все сообщения от Andrew_J
  № 6  
Ответить с цитированием
Andrew_J

Регистрация: Aug 2004
Сообщений: 110
Отправить сообщение для Andrew_J с помощью ICQ
Прошу прощения за тупой вопрос, но куда этот код вставлять чтобы работало?

Старый 23.06.2008, 00:58
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Сохранить в файле с расширением jsfl. Потом в меню выберите Commands > Run command... и этот файл.
Либо скачайте модуль CommandPromt, позволяющий запускать jsfl в панели ide
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 23.06.2008, 19:10
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 8  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
чуток потом придется руками подправить, если было много кейфреймов разной длины.

Старый 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;

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:03.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.