Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
foobar2000:tagz:tutorial:create_animation [2006/06/07 05:16] Mishail создано |
foobar2000:tagz:tutorial:create_animation [2006/06/11 02:55] (текущий) |
||
---|---|---|---|
Строка 10: | Строка 10: | ||
Для того чтобы применить новые цвета, перейдите во вкладку **Style** столбца //Track// и добавьте эти строки в конец существующего скрипта. | Для того чтобы применить новые цвета, перейдите во вкладку **Style** столбца //Track// и добавьте эти строки в конец существующего скрипта. | ||
- | <html><pre><font color="#808080"><i>[...]</i></font></br> | + | <html><pre class="code"><font color="#808080"><i>[...]</i></font> |
- | </br> | + | |
- | $if(%isplaying%,</br> | + | $if(%isplaying%, |
- | $set_style(text,$get_global(cTxtPlay),$get_global(cTxtPlay))</br> | + | $set_style(text,$get_global(cTxtPlay),$get_global(cTxtPlay)) |
- | $set_style(back,$get_global(cBgPlay),$get_global(cBgPlay))</br> | + | $set_style(back,$get_global(cBgPlay),$get_global(cBgPlay)) |
) | ) | ||
</pre></html> | </pre></html> | ||
Строка 24: | Строка 24: | ||
Естесттвенно эта переменная должна быть использована в скрипте. Лучше всего это сделать во вкладке **Display** столбца //Track//, в которой мы уже сделали отображение имен исполнителей красным цветом. | Естесттвенно эта переменная должна быть использована в скрипте. Лучше всего это сделать во вкладке **Display** столбца //Track//, в которой мы уже сделали отображение имен исполнителей красным цветом. | ||
- | <html><pre> | + | <html><pre class="code"> |
- | <font color="#808080">$if($and($get_global(isAlbum),$meta(album artist)),</br> | + | <font color="#808080">$if($and($get_global(isAlbum),$meta(album artist)), |
- | </br></font> | + | </font> |
- | $if(%isplaying%,</br> | + | $if(%isplaying%, |
- | $get_global(cTxtVAPlay),</br> | + | $get_global(cTxtVAPlay), |
- | <font color="#808080">$ifequal(%tracknumber%,1,$get_global(cTxtVA1),$get_global(cTxtVA))</br> | + | <font color="#808080">$ifequal(%tracknumber%,1,$get_global(cTxtVA1),$get_global(cTxtVA)) |
- | )</br> | + | ) |
- | </br> | + | |
- | [$meta(artist)' - ']$rgb()</br> | + | [$meta(artist)' - ']$rgb() |
- | )</br> | + | ) |
- | </br> | + | |
%title%</font> | %title%</font> | ||
</pre></html> | </pre></html> | ||
Строка 44: | Строка 44: | ||
"Now-playing" анимация состоит из двух частей. Первая часть касается столбца //Time//, в нем мы хотим показывать оставшееся время проигрывания песни. Вкладка **Display** это то самое место, где мы будем это делать. | "Now-playing" анимация состоит из двух частей. Первая часть касается столбца //Time//, в нем мы хотим показывать оставшееся время проигрывания песни. Вкладка **Display** это то самое место, где мы будем это делать. | ||
- | <html><pre> | + | <html><pre class="code"> |
- | $if(%_time_remaining%,</br> | + | $if(%_time_remaining%, |
- | '['%_time_remaining%']',</br> | + | '['%_time_remaining%']', |
- | <font color="#808080">$if2(%_length%,'n/a')</font></br> | + | <font color="#808080">$if2(%_length%,'n/a')</font> |
) | ) | ||
</pre></html> | </pre></html> | ||
Строка 57: | Строка 57: | ||
Так ''%_time_remaining%'' обновляется каждую секунду, так же как и отображение всего плэйлиста, то этот скрипт показывает непрерывное уменьшение оставшееся время до нуля. И это первая часть анимации. | Так ''%_time_remaining%'' обновляется каждую секунду, так же как и отображение всего плэйлиста, то этот скрипт показывает непрерывное уменьшение оставшееся время до нуля. И это первая часть анимации. | ||
- | Вторая часть располагается в столбце //Tracknumber//. Здесь мы собираемся отображать четыре закрывающих скобки ''))))'', которые будут заменяться одна за другой, слева направо, открывающимися скобками ''(((('' другого цвета. А затем наоборот. | + | Вторая часть располагается в столбце //Tracknumber//. Здесь мы собираемся отображать четыре закрывающих скобки <html>))))</html>, которые будут заменяться одна за другой, слева направо, открывающимися скобками <html>((((</html> другого цвета. А затем наоборот. |
Для того чтобы это сделать, нам нужен таймер, определяющий интервалы между всеми состояниями. К сожалению в Tagz нет явной встроенной поддержки таймеров, но мы можем сделать наш собственный, используя функцию ''$mod()'' и поле ''%_time_elapsed_seconds%'', которые работая совместно выступят в роли посекундного счетчика. Давайте посмотрим на скрипт во вкладке **Display** столбца ''Tracknumber''. Здесь нам понадобится немного другой скрипт. | Для того чтобы это сделать, нам нужен таймер, определяющий интервалы между всеми состояниями. К сожалению в Tagz нет явной встроенной поддержки таймеров, но мы можем сделать наш собственный, используя функцию ''$mod()'' и поле ''%_time_elapsed_seconds%'', которые работая совместно выступят в роли посекундного счетчика. Давайте посмотрим на скрипт во вкладке **Display** столбца ''Tracknumber''. Здесь нам понадобится немного другой скрипт. | ||
- | <html><pre> | + | <html><pre class="code"> |
- | $ifequal($put(foo,<b>$mod(%_time_elapsed_seconds%,8)</b>),0,</br> | + | $ifequal($put(foo,<b>$mod(%_time_elapsed_seconds%,8)</b>),0, |
- | '))))',</br> | + | '))))', |
- | // вставьте состояния с 1 по 7 здесь</br> | + | // вставьте состояния с 1 по 7 здесь |
) | ) | ||
</pre></html> | </pre></html> | ||
Строка 70: | Строка 70: | ||
В этом скрите два момента особенно интересны. Первый - это функции ''$put()'' и ''$get()''. Нам уже известны ''$set_global()'' и ''$get_global()'', устанавливающие и возвращающие глобальные переменные, но теперь мы имеем дело с личными (//private//) переменными, которые определены только в рамках одного скрипта. К примеру, выражение ''$put(aname,%artist%)'' сохраняет имя исполнителя в переменной с именем ''aname'' и в дополнение выводит это имя, как если бы Вы использовали поле %artist%. Но в большинстве случаев такой вывод нежелателен (т.е. нам нужно просто сохранить значение в переменной, не выводя ничего на экран) и в этом случае нам поможет ''$puts()'', делающая то же самое, но позволяющая избежать вывод значения на экран. Если позднее мы захотим получить значение нашей переменной, то мы будем использовать ''$get(aname)''. Все это справедливо только в рамках одного и того же скрипта, т.е. если переменная ''aname'' определена во вкладке **Display** столбца с номером трэка, то она имеет силу только здесь, в этой вкладке, и нигде больше. | В этом скрите два момента особенно интересны. Первый - это функции ''$put()'' и ''$get()''. Нам уже известны ''$set_global()'' и ''$get_global()'', устанавливающие и возвращающие глобальные переменные, но теперь мы имеем дело с личными (//private//) переменными, которые определены только в рамках одного скрипта. К примеру, выражение ''$put(aname,%artist%)'' сохраняет имя исполнителя в переменной с именем ''aname'' и в дополнение выводит это имя, как если бы Вы использовали поле %artist%. Но в большинстве случаев такой вывод нежелателен (т.е. нам нужно просто сохранить значение в переменной, не выводя ничего на экран) и в этом случае нам поможет ''$puts()'', делающая то же самое, но позволяющая избежать вывод значения на экран. Если позднее мы захотим получить значение нашей переменной, то мы будем использовать ''$get(aname)''. Все это справедливо только в рамках одного и того же скрипта, т.е. если переменная ''aname'' определена во вкладке **Display** столбца с номером трэка, то она имеет силу только здесь, в этой вкладке, и нигде больше. | ||
- | Вторым интересным моментом является, конечно же, конструкция самого таймера. Его ядром является выражение ''$mod(%_time_elapsed_seconds%,8)''. Напомню что ''$mod()'' возвращает остаток от деления, в нашем случае это остаток от деления количества прошедших секунд на 8. Так же как и ''%_time_remaining%'', ''%_time_elapsed_seconds%'' обновляется каждую секунду, таким образом ''$mod()'' будет каждую секунду возвращать значения последовательно с 0 до 7, и затем снова с 0, что позволяет нам выделить 8 различных случаев. И это именно то, что нам нужно для того чтобы реализовать наш замысел в анимации, ведь изменение четырех )))) на четыре (((( и наоборот требует как раз 8 стадий. | + | Вторым интересным моментом является, конечно же, конструкция самого таймера. Его ядром является выражение ''$mod(%_time_elapsed_seconds%,8)''. Напомню что ''$mod()'' возвращает остаток от деления, в нашем случае это остаток от деления количества прошедших секунд на 8. Так же как и ''%_time_remaining%'', ''%_time_elapsed_seconds%'' обновляется каждую секунду, таким образом ''$mod()'' будет каждую секунду возвращать значения последовательно с 0 до 7, и затем снова с 0, что позволяет нам выделить 8 различных случаев. И это именно то, что нам нужно для того чтобы реализовать наш замысел в анимации, ведь изменение четырех <html>))))</html> на четыре <html>((((</html> и наоборот требует как раз 8 стадий. |
Для того чтоб сэкономить немного времени мы не только вычисляем значение функции ''$mod()'', но и с помощью ''$put()'' помещаем его в переменную ''foo'', потому что это значение нам в скором времени понадобится. Заметьте, что в этом случае необходимо использовать именно ''$put()'', а не ''$puts()'', потому что ''$puts()'' не вернет ничего, и функции ''$ifequal()'' нечего будет анализировать. | Для того чтоб сэкономить немного времени мы не только вычисляем значение функции ''$mod()'', но и с помощью ''$put()'' помещаем его в переменную ''foo'', потому что это значение нам в скором времени понадобится. Заметьте, что в этом случае необходимо использовать именно ''$put()'', а не ''$puts()'', потому что ''$puts()'' не вернет ничего, и функции ''$ifequal()'' нечего будет анализировать. | ||
Строка 76: | Строка 76: | ||
''$Ifequal()'' корректно обработает остаток от деления 0, что является началом нашей анимации, ведь ''$mod(0,8)'' равно 0, выдав в этом случае '))))' (использование одиночных кавычек в этом случае так же обязательно). Остальная часть анимация контроллируется выражением ''$select()''. | ''$Ifequal()'' корректно обработает остаток от деления 0, что является началом нашей анимации, ведь ''$mod(0,8)'' равно 0, выдав в этом случае '))))' (использование одиночных кавычек в этом случае так же обязательно). Остальная часть анимация контроллируется выражением ''$select()''. | ||
- | <html><pre> | + | <html><pre class="code"> |
- | <font color="#808080">$ifequal($put(foo,$mod(%_time_elapsed_seconds%,8)),0,</br> | + | <font color="#808080">$ifequal($put(foo,$mod(%_time_elapsed_seconds%,8)),0, |
- | '))))',</font></br> | + | '))))',</font> |
- | $select($get(foo),</br> | + | $select($get(foo), |
- | $get_global(cTxtDim)'('$rgb()')))',</br> | + | $get_global(cTxtDim)'('$rgb()')))', |
- | $get_global(cTxtDim)'(('$rgb()'))',</br> | + | $get_global(cTxtDim)'(('$rgb()'))', |
- | $get_global(cTxtDim)'((('$rgb()')',</br> | + | $get_global(cTxtDim)'((('$rgb()')', |
- | $get_global(cTxtDim)'((((',</br> | + | $get_global(cTxtDim)'((((', |
- | ')'$get_global(cTxtDim)'(((',</br> | + | ')'$get_global(cTxtDim)'(((', |
- | '))'$get_global(cTxtDim)'((',</br> | + | '))'$get_global(cTxtDim)'((', |
- | ')))'$get_global(cTxtDim)'('</br> | + | ')))'$get_global(cTxtDim)'(' |
- | )</br> | + | ) |
<font color="#808080">)</font> | <font color="#808080">)</font> | ||
</pre></html> | </pre></html> | ||
Строка 99: | Строка 99: | ||
Теперь включим наше творение в уже существующий скрипт, добавив его в конструкцию ''$if(%isplaying%,,)''. Вот законченный скрипт (и не забудьте добавить новую закрывающую скобку в самом конце скрипта) | Теперь включим наше творение в уже существующий скрипт, добавив его в конструкцию ''$if(%isplaying%,,)''. Вот законченный скрипт (и не забудьте добавить новую закрывающую скобку в самом конце скрипта) | ||
- | <html><pre> | + | <html><pre class="code"> |
$if(%isplaying% | $if(%isplaying% | ||
, | , | ||
Строка 119: | Строка 119: | ||
$hex(%tracknumber%,1), | $hex(%tracknumber%,1), | ||
$get_global(cTxtDim)'0'$rgb()$hex(%tracknumber%,1) | $get_global(cTxtDim)'0'$rgb()$hex(%tracknumber%,1) | ||
- | )) | + | ))</font> |
- | )</font> | + | ) |
</pre></html> | </pre></html> | ||
Строка 126: | Строка 126: | ||
===== Результат ===== | ===== Результат ===== | ||
+ | |||
Ну вот, с готовой анимацией наш дизайн вполне пригоден для использования, конечно некоторые небольшие кусочки все еще не сделаны, но скриншот этой стадии уже совсем не отличается от законченного дизайна. | Ну вот, с готовой анимацией наш дизайн вполне пригоден для использования, конечно некоторые небольшие кусочки все еще не сделаны, но скриншот этой стадии уже совсем не отличается от законченного дизайна. | ||
+ | |||
{{stage_3.png?250x183|Щелкните для увеличения}} | {{stage_3.png?250x183|Щелкните для увеличения}} | ||
+ | |||
В следующей главе мы займемся доработкой мелочей. Но, тем не менее, наш плэйлист уже полностью готов. | В следующей главе мы займемся доработкой мелочей. Но, тем не менее, наш плэйлист уже полностью готов. | ||
+ | ~~DISCUSSION~~ |