Здравствуйте друзья!
Выкладываю обещанный 2 урок. Он предназначен для пользователей 8 версии. Необходимо владение языком АС 2.0.
Примерно так выглядит готовый вариант.
Это похоже на титры из какого-то фильма ("Звездные войны" кажись? :-)).
Как видите, я "перспективно" исказил символы в строке. Кроме того, строки масштабируются и перемещаются. Все эти преобразования мы сделаем с помощью матрицы, ни разу не обратившись, при этом, к стандартным свойствам клипов.
Для упрощения восприятия материала, я разбил код на 3, логически зависимые, части и буду комментировать их в порядке написания.
Теперь подготовка. Создайте в папке текстовый файл с текстом в несколько коротких строк (у меня кусочек песни И. Талькова) и сохраните его в кодировке UTF8 под именем "titles.txt".
Во флэше создайте новый однокадровый документ с двумя слоями и сохраните его в ту-же папку. На одном из слоев нарисуйте или импортируйте клип в виде кнопки повтора и дайте ему инстанс имя - "r_mc".
Второй слой мы бум использовать под код. Выделите его нажмите [F9] и вперед...
Часть 1.
Инициализация пременных. Загрузка и парсинг текста. Стартовая подготовка.
// Пути к необходимым здесь классам&nbsp;<br /><br />
import flash.geom.*;<br /><br />
import flash.display.*;<br /><br />
// Глобальные переменные<br /><br />
var titles:XML = new XML();<br /><br />
//Объект загрузчик текста<br /><br />
var lines:Array = [];<br /><br />
//Массив для хранения строк текста<br /><br />
var lineCount:Number;<br /><br />
//Счетчик строк. Нужен для отслеживания полного окончания анимации<br /><br />
//Формат символов<br /><br />
var tf:TextFormat = new TextFormat('Arial', 42, 0, true);<br /><br />
//var tf:TextFormat = new TextFormat('Arbat', 42, 0, true);<br /><br />
//При успешной загрузе текста, вызовем процедуру его парсинга<br /><br />
/**/<br /><br />
titles.ignoreWhite = true;<br /><br />
titles.onload = function(succes) {<br /><br />
if (!this.loaded || this.status) {<br /><br />
&nbsp;throw new Error('An error occured while loading XML');<br /><br />
&nbsp;return;<br /><br />
}<br /><br />
var txt = this.firstChild.toString();<br /><br />
parse(txt);<br /><br />
};<br /><br />
/*Парсер весьма прост. Определим символ окончания строки. Дело в том, что он бывает разный. И забьем текст в массив<br /><br />
построчно, используя этот символ, в качестве разделителя.<br /><br />
Теперь можно запускать основную процедуру*/<br /><br />
function parse(arg:String) {<br /><br />
var ent:String = (arg.split('rn')).length>1 ? 'rn' : 'n';<br /><br />
lines = arg.split(ent);<br /><br />
generate();<br /><br />
}
Часть 2.
Сейчас у нас есть массив "lines" содержащий текст из файла - построчно.
Мы сделаем для каждой строчки клип контейнер. В нем, создадим контейнеры для каждого символа этой строки. Туда "положим" растровые изображения символов и исказим матрицу каждого символьного контейнера. Теперь переведем всю строку в растр и уничтожим контейнеры символов, за ненадобностью. Такое решение позволило прилично снизить нагрузку на процессор. После выстроим клипы-строки внизу фильма, одну за другой, вне зоны видимости и запустим анимацию построчно.
function generate() {<br /><br />
r_mc._visible = false;<br /><br />
//Уберем кнопку повтора<br /><br />
var LL:Number = lines.length;<br /><br />
// Кол-во строк нашего текста<br /><br />
lineCount = 0;<br /><br />
//Сбросим счетчик строк. Он пригодится в процедуре анимации<br /><br />
for (var i:Number = 0; i&lt;LL; i++) {<br /><br />
Часть 3.
Собственно анимация и кой какие мелочи.
Здесь меняются лишь размеры и координаты контейнеров-строк и вполне можно было обойтись модификацией стандартных свойств клипов
т.е. "_x", "_y", "_xscale", "_yscale". Но, для пущего обучения, мы и здесь продолжим мучать матрицу трансформации.
Обратите внимание на формулы модификаторов ширины и высоты клипа. Имея небольшую разницу в написании, они абсолютно неодинаково модифицируют параметры матрицы. Попытайтесь самостоятельно в них разобраться.
В этой-же процедуре следим, если клип вышел за пределы документа, сразу подметаемся. Когда контейнеров не останется - выходим из функции и показываем кнопку повтора.
&nbsp;function animate(mc) {<br /><br />
clearInterval(mc.id);<br /><br />
//Грохнем таймер<br /><br />
var m:Matrix = mc.transform.matrix;<br /><br />
//Возьмем текущую матрицу для дальнейшей ее модификации<br /><br />
&nbsp;//по таймеру анимируем его дальше.<br /><br />
}<br /><br />
}<br /><br />
//Процедура, вызываемая по завершении анимации<br /><br />
function endAnimate() {<br /><br />
//Покажем кнопку повтора<br /><br />
r_mc._visible = true;<br /><br />
}<br /><br />
// Обработчик нажатия на кнопку<br /><br />
r_mc.onRelease = function() {<br /><br />
generate();<br /><br />
};<br /><br />
//Загрузка текста<br /><br />
titles.load('titles.txt');
Вот и все! Всем спасибо за внимание и творческих успехов!
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
Искренняя благодарность за любезно предоставленные материалы. Все ваши пожелания, советы и рекомендации будут учтены. Будем рады снова видеть Вас на страничках нашего сайта.
"Движение свободных сайтов Рунета" 2007—2008. Администрация не несет ответственности за файлы размещенные пользователями.