Инструменты пользователя

Инструменты сайта


foobar2000:tagz:tutorial:create_animation

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
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~~
foobar2000/tagz/tutorial/create_animation.1149643018.txt.gz · Последние изменения: 2006/06/07 04:25 (внешнее изменение)