FlashГид
Ваш проводник в мире Flash!



Часы

Источник: http://www.actionscript.org
http://www.actionscript.org/tutorials/beginner/A_clock/index.shtml
Автор: Jono Hayward, www.groove.org.au

Перевод: Bright, Brightcor@yandex.ru
Уровень сложности: Начинающий (Beginner)
Требования: MX 2004
Нужные знания: Переменные (Variables)
Скачать исходник



Описание часов
Это красивые простые часы.
Я решил, что легче будет собрать всё в один клип (movie clip), чтобы потом Вы смогли поместить ваши часы на сцене (stage) как захотите. Итак, в основном:

шаг первый:
Нажмите ctrl + F8 чтобы создать новый клип (movie clip). Не имеет значения как вы его назовете. Откройте Библиотеку (Library), нажав ctrl + L, и перетащите клип на сцену (stage).

шаг второй:
Откройте клип, дважды щелкнув по нему в библиотеке. Нажмите правой кнопкой на второй кадр клипа и выберите "Вставить кадр"("insert frame")*.
//ИМХО, надо сначала сделать всё в первом кадре, а уж потом вставлять новый. И проще нажать F6, а не лазить по меню. -прим. Bright'a

третий шаг:
Внутри клипа сделайте два динамических текстовых поля (dynamic text). Дайте одному имя переменной (variable name) "time" (без кавычек), а другому "datefinal".

четвертый шаг:
Нажмите на первом кадре и откройте панель Действия (actions panel). Это место, где начинается самое забавное.
//А как еще перевести "This is where the fun begins."? :) -прим. Bright'a
Сначала мы хотим получить все значения системных часов пользователя и назначить их отдельным переменным.
Скопируйте этот код в панель Действия кадра (Actions Frame):

mydate = new Date();
seconds = mydate.getSeconds();
minutes = mydate.getMinutes();
hours = mydate.getHours();
day = mydate.getDay();
date = mydate.getDate();
month = mydate.getMonth();
year = mydate.getFullYear();


пятый шаг:
Некоторые из этих переменных, если мы вставим их в текстовое поле, дадут странный результат. Например, если сегодня воскресенье переменная "day" выдаст только "0", если понедельник она выдаст "1" и т.д. Так же с месяцами. И когда стандартные цифровые часы будут показывать время как 9:03:05 наши часы покажут 9:3:5, что смотрится странно. Чтобы исправить всё это, мы используем эти кусочки кода:

пятый шаг(a):
>>чтобы изменить номер дня на его название, мы используем оператор if.

if (day==0){
day = "Sunday"
} else if (day==1){
day = "Monday"
} else if (day==2){
day = "Tuesday"
} else if (day==3){
day = "Wednesday"
} else if (day==4){
day = "Thursday"
} else if (day==5){
day = "Friday"
} else if (day==6){
day = "Saturday"
}


Этот код сообщает программе "если день равен 0 тогда день воскресенье" и т.д.
>> так же и для месяцев

if (month==0){
month = "January"
} else if (month==1){
month = "February"
} else if (month==2){
month = "March"
} else if (month==3){
month = "April"
} else if (month==4){
month = "May"
} else if (month==5){
month = "June"
} else if (month==6){
month = "July"
} else if (month==7){
month = "August"
} else if (month==8){
month = "September"
} else if (month==9){
month = "October"
} else if (month==10){
month = "November"
} else if (month==11){
month = "December"
}


пятый шаг(b):
Если вы захотите оставить месяцы как числа, то вместо этого огромного, загруженного операторами if, просто напишите этот код:

month = month + 1;

пятый шаг(c):
>> чтобы минуты и секунды отображались правильно, мы опять используем оператор if.

if (minutes<10) {
minutes = "0"+minutes;
}
if (seconds<10) {
seconds = "0"+seconds;
}


Это немного сложно. Этот код говорит программе "Если значение минут меньше чем 10, тогда надо добавить ноль в начало". Это немного странный тип сложения - это тип, когда вы добавляете 5 к 3 и получаете 53, а не 8. Это сработало, потому что 0 мы добавляли в кавычках "", которые сделали его строковым значением (string). Для большей информации смотрите variables 101 tutorial.

шаг шестой:
Чтобы поменять формат времени с 24-часового на 12-часовой, мы используем этот код (если вы хотите оставить 24-часовой формат времени, пропустите это):

if (hours>12) {
hours = hours-12;
ampm = "PM";
} else {
ampm = "AM";
}
if (hours == 0) {
hours = 12;
}


Этот код говорит программе "Если значение часов больше 12, тогда вычитать 12 из этого значения" и поменять статус am/pm индикатора на PM. И затем счетчик, например, если часы показывают 12 и значение станет 0, поменяет значение часов на 12 так как полночь не может быть 0 AM.

шаг седьмой:
Здесь становится интереснее. Здесь мы собираем вместе то, что будет отображено в текстовых полях. Используйте этот код, чтобы собрать вместе время (12 часов):

time = ((hours) + ":" + (minutes) + ":" + (seconds) + " " + (ampm));

Или этот код (24 часа):

time = ((hours) + ":" + (minutes) + ":" + (seconds));

Этот код собирает строку с отображением времени - так вы получаете часы, потом ":", затем минуты и так далее. Используйте этот код, чтобы собрать вместе даты (с именами):

datefinal = ((day) + " " + (date) + " " + (month) + " " + (year));

Принцип такой же, вы получаете день недели, потом вставляете пробел, потом дату и т.д. Используйте этот код, чтобы собрать вместе даты (только номера, если вы используете это выполните шаг пять(b), а не пять(a)):

datefinal = ((date) + "/" + (month) + "/" + (year));

Имейте в виду, что это австралийский формат даты, чтобы сделать его американским просто поменяйте местами переменные "date" и "month".
Это всё! Просто нажмите Ctrl + Enter чтобы протестировать фильм.

*Это делается, чтобы значения часов обновлялись сами. Вместо большого и сложного способа, это срабатывает 12 раз за каждую секунду (или так часто как вы установили значение FPS), и каждый раз, возвращаясь к 1 кадру, флэшка снова проверяет значение системных часов. Это означает, что как только секунды поменяются, скрипт "поймает" новое значение и обновит часы.
//Довольно запутанно получилось. Скажу проще - это надо чтобы часы обновлялись, а как это работает не важно... :) -прим. Bright'a