Из жизни шестеренок: Flash-анимация подручными средствами

Сколько раз убеждаюсь: с помощью Linux можно решить любые компьютерные задачи. Вот, казалось бы, Flash-анимация. Для нее под Linux нет инструментов на уровне тех, которые предлагает Adobe. Зато есть набор консольных инструментов swftools, с помощью которых, оказывается, тоже можно делать довольно-таки интересные «мультики».

Рассмотрим такую задачу: создать preload-ролик, который демонстрируется в начале Flash-анимации (пока загружается основное содержимое). В Интернете можно найти готовые рецепты, так что особых секретов здесь нет, за исключением того, что мы воспользуемся консольными утилитами.

Но не только ими, конечно. Нужно чтобы на экране во время preload-процесса крутилась модная нынче «шестеренка», а ее волей-неволей придется рисовать в каком-нибудь графическом векторном редакторе. Под Linux'ом лучшим в этом роде является InkScape. Им и воспользуемся.



InkScape сохраняет свои файлы в формате svg, который есть ни что иное, как разновидность xml. Это значит, что текстовое описание нашей кривой легко извлечь из svg-файла (привожу фрагмент, т.к. в реальном файле описание кривой занимает несколько больше места):


    <path
       style="fill:#ffffff;stroke:none"
       d="M 274.28125 -993.34375 L 274.28125 46.65625 L 494.28125 46.65625 L 494.28125 -993.34375 
       ..."
       id="rect3608" />



Теперь в дело вступает чистая консоль. В комплект swftools, которым будем «рисовать» дальше, входит утилита swfc, которая «умеет» создавать Flash-анимацию из особого рода текстовых скриптов. Примеры таких скриптов легко можно найти на сайте swftools, гда выложено и описание синтаксиса. Начало нашего скрипта, генерирующего вращающуюся «шестеренку», выглядит так:


.flash name="spinner.swf" fps=20
	.outline spinner_outline: 
		M 274.28125 -993.34375 L 274.28125 46.65625 L 494.28125 46.65625 L 494.28125 -993.34375 L 274.28125 
                ...
	.end
	.gradient transp:
		0% #ffffff00
		100% #ffffffff
	.end

	.filled spinner outline=spinner_outline fill=transp color=#ccccccff


(опять таки сокращаю формулу кривой, которую нужно тупо скопипастить из вышеупомянутого svg-файла). Здесь же описан черно-белый градиент, которым залит контур «шестеренки».

Теперь поворачиваем «шестеренку» на 360 градусов:


        .frame 1
		.put spinner pin=center
	.frame 240
		.change spinner rotate=360
.end


Поскольку в начале скрипта задано, что «мультик» будет показываться с частотой 20 кадров в секунду, можно подсчитать, что полный оборот «шестеренка» производит за 12 секунд.

Откомпилировать скрипт в swf-файл можно командой


swfc spinner.sc


Имя результирующего файла — spinner.swf — задано в первых строках скрипта. Можно также задать его с помощью ключа -o команды.

«Шестерня» сама по себе не имеет ценности. Она нужна в качестве заставки для preloader'а, демонстрирующегося при загрузке более «тяжелого» (2-5 Мб) Flash-ролика, созданного, например, программой Wink. Основной («тяжелый») ролик сохранен, предположим, в файл lesson.swf. Соберем spinner.swf и lesson.swf в единый ролик:


.flash  fps=20
	.swf spinner "spinner.swf"
	.put spinner pin=center
	.frame 1
	.frame 240
		.action:
		     toLoad = _root.getBytesTotal();
		     loaded = _root.getBytesLoaded();
		     if(toLoad > loaded) gotoFrame(1);
		     else{
			 gotoFrame(241);	
		     }	
		.end
        .swf slides "lesson.swf"
	.frame 241
		.stop
		.del spinner
	       	.put slides pin=center scale=100000%
.end


Этот код я здесь подробно анализировать не буду, оставляя его разбор в качестве упражнения для заинтересованного читателя. Скажу только, что в данном примере видно, что в подобных файлах может быть задействован синтаксис ActionScript. Кроме того, такие скрипты позволяют включать в собираемые swf-файлы звуки, картинки в формате jpg и png и многое другое.

Что получилось можно посмотреть здесь.

Sapienti sat.
  • +3
  • 11 октября 2009, 22:13
  • yababay

Комментарии (5)

RSS свернуть / развернуть
+
0
статью в мемориз — однозначно!!!
avatar

Sergei_T

  • 12 октября 2009, 11:37
+
0
Спасибо на добром слове Smile

Я тут собрался с силами и выложил все свои материалы на персональный сайт. Посмотри плиз что можно сюда скопипастить. Если таковое обнаружится — сообщи, сделаю. Там вкладки «Админинг» и «Кодинг», где присутствует всё что было моего на linux16.net. Многие статьи устарели, так что нужно всё-таки глянуть. Статьи нигде больше не публиковались, так что боянов не будет. При публикации на world16 буду еще раз вычитывать и приводить в соответствие с своевременными реалиями.
avatar

yababay

  • 12 октября 2009, 15:47
+
0
Может быть зарегистрируешь домен?
В зоне .ru — 110 рублей
Могу поднять на нашем сервере тебе wordpress
как у меня блог на wordpress —

Пиши в аську если что
avatar

Sergei_T

  • 12 октября 2009, 16:06
+
0
также не забываем ставить тег linux Smile
avatar

Sergei_T

  • 12 октября 2009, 11:37
+
0
По белому завидую авторскому широкому кругозору.
Я как упрусь в одно-хоть плачь…
Респект и уважуха! Желаю удачи!
avatar

Markony

  • 02 декабря 2009, 09:27

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.