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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.10.2008, 20:42
ladon вне форума Посмотреть профиль Отправить личное сообщение для ladon Найти все сообщения от ladon
  № 1  
Ответить с цитированием
ladon

Регистрация: May 2006
Сообщений: 125
Есть задача, надо взять кусок таймлайна и запихать его в символ.
для этого написана следующая jsfl конструкция
Код:
function Select( y, x, dy, dx )
{
	var tl = fl.getDocumentDOM().getTimeline();
	var a = new Array();
	for (var i = y; i< y + dy; i++) {
		a.push(i);
		a.push(x)
		a.push(x+dx);
	}
	tl.setSelectedFrames(a);
}

function ToMovieClip(name, y, x, dy, dx, prefix) {
	var tl = fl.getDocumentDOM().getTimeline();
	Select(y, x, dy, dx);
	tl.copyFrames();

	var lib = fl.getDocumentDOM().library;
	if (lib.itemExists(prefix+name)) {
		lib.deleteItem(prefix+name);
	}
	lib.addNewItem("movie clip",prefix+name);
	lib.editItem(prefix+name);
	fl.getDocumentDOM().getTimeline().selectAllFrames();
	
	fl.getDocumentDOM().getTimeline().pasteFrames();
	fl.getDocumentDOM().exitEditMode();
}
Все это богатство вызывается из функции Start() в данном jsfl файле.
Проблема заключается в том что при запуске lsfl файла все проходит нормально, а если Start вызвать из другого скрипта то функция
Код:
fl.getDocumentDOM().getTimeline().pasteFrames();
выдает Unknown error и соотвественно не вставляет кадры в символ.

То что такую ошибку дает именно pasteFrames выяснено путем покомандных alert().

Как можно с этим бороться ктонибудь знает?

Дополнительные изыскания показали что jsfl скрит работает нормально только если его вызвать через меню Commands->run command при уже открытом файле.
Если файл запустить просто из проводника при открытом файле - ситуация повторяется полностью, т.е. pasteFrames() выдает unknown error.

Как оказалось работа pasteFrames имеет замечательные особенности.
pasteFrames может вставить только непрерывный кусок кадров.

И еще более замечательные особенности нашлись у метода
fl.getDocumentDOM().getTimeline().setSelectedFrames(array);
по неизвестной мне причине применение этого метода дает разные результаты при срабатывании на только что открытом файле и на уже давно открытом. А именно на только что открытом файле этот метод не выделяет слои в которых только пустые кадры.

Код:
fl.openDocument("file:///testFile.fla");
Select(0,17,81,23);
fl.trace(fl.getDocumentDOM().getTimeline().getSelectedFrames()+"\n");
получается примерно следующее
на только что отрытом в скрипте файле
Код:
y 0 x 17 dy81 dx 23
6,17,40,7,17,40,8,17,40,9,17,40,11,17,40
на открытом во флеше файле и запущеном через Run Command скрипте
Код:
y 0 x 17 dy81 dx 23
0,17,40,1,17,40,2,17,40,3,17,40,4,17,40,5,17,40,6,17,40,7,17,40,8,17,40,9,17,40,10,17,40,11,17,40,12,17,40,13,17,40,14,17,40,15,17,40,16,17,40,17,17,40,18,17,40,19,17,40,20,17,40,21,17,40,22,17,40,23,17,40,24,17,40,25,17,40,26,17,40,27,17,40,28,17,40,29,17,40,30,17,40,31,17,40,32,17,40,33,17,40,34,17,40,35,17,40,36,17,40,37,17,40,38,17,40,39,17,40,40,17,40,41,17,40,42,17,40,43,17,40,44,17,40,45,17,40,46,17,40,47,17,40,48,17,40,49,17,40,50,17,40,51,17,40,52,17,40,53,17,40,54,17,40,55,17,40,56,17,40,57,17,40,58,17,40,59,17,40,60,17,40,61,17,40,62,17,40,63,17,40,64,17,40,65,17,40,66,17,40,67,17,40,68,17,40,69,17,40,70,17,40,71,17,40,72,17,40,73,17,40,74,17,40,75,17,40,76,17,40,77,17,40,78,17,40,79,17,40,80,17,40


так же было установлено
после открытия файла fl.openDocument команда fl.getDocumentDOM().getTimeline().setSelectedFrames не может выбирать пустые ключевые кадры.
команда fl.getDocumentDOM().getTimeline().selectAllFrames(); замечательно выбирает все кадры, fl.getDocumentDOM().getTimeline().setSelectedLayers(1,true); так же нормально выбирает пустые кадры.

в качестве решения рассмотрен алгоритм - копируем весь таймлайн и отрезаем лишнее спереди и сзади нужного куска. неподходит, нельзя удалить то что неполучается выделить

единственный вариант покадровое перенесение.


Последний раз редактировалось iNils; 16.10.2008 в 10:12.
Старый 16.10.2008, 10:13
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

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

Старый 16.10.2008, 10:49
ladon вне форума Посмотреть профиль Отправить личное сообщение для ladon Найти все сообщения от ladon
  № 3  
Ответить с цитированием
ladon

Регистрация: May 2006
Сообщений: 125
Алилуйя братья! Есть, есть решение данной проблемы...
1. Открываем flash ide.
2. Создаем новый файл.
3. Запускаем скрипт через run command.

Эта фигня с выделением себя проявляет только как визуальный глюк. Кадры пустые кадры нормально выделяются и копируются.

Главное только скрипт жестко не привязывать к номеру документа, т.е. избегать конструкций fl.documents[0]. и тому подобных. fl.getDocumentDOM(). вполне решает вопрос.

Прошу прощения за несколько сообщений, просто очень уж наболело.

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

Теги
jsfl pasteframes

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

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


 


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


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