Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ActionScript 2.0 ЛР.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.88 Mб
Скачать

Дата и время Объект Date

В этом проекте мы изучим средства для работы с датами и временем:

  • объект Date (дата);

  • функцию getTimer() (получить время таймера).

В результате будет построен ролик, который показывает сегодняшнюю дату, день недели и время, а также может служить будильником.

Создать новый объект класса Date можно так:

d = new Date(2007, 5, 11);

Первое число — год, второе — номер месяца, третье — число. Эта дата — 11 июня 2007 года. Здесь нет ошибки, номера месяцев начинаются с нуля, поэтому месяц 5 в программе Flash — это июнь.

Если параметры не используются:

today = new Date();

создается объект с сегодняшней датой.

С помощью методов объекта Date можно определить год, месяц, число и день недели:

  • today.getFullYear() — год;

  • today.getMonth() — месяц;

  • today.getDate() — число;

  • today.getDay() — день недели;

  • today.getHours() — часы;

  • today.getMinutes() — минуты;

  • today.getSeconds() — секунды.

Дни недели, так же, как и месяцы, нумеруются с нуля, причем неделя начинается с воскресенья (день 0), понедельник имеет номер 1 и т.д.

  1. Скопируйте clock.fla в свою папку. Добавьте динамические текстовые поля (Dynamic Text) для вывода дня недели, числа, месяца года так, как на образце. Дайте им имена day, date, month и year, установите выравнивание по центру, выберите цвет и размер шрифта.

Day

Date

Month

Year

  1. Добавьте слой Программа и в первом кадре введите код

stop();

today = new Date();

weekDays = ["воскресенье", "понедельник", "вторник",

"среда", "четверг", "пятница", "суббота"];

months = ["января", "февраля", "марта", "апреля",

"мая", "июня", "июля", "августа", "сентября",

"октября", "ноября", "декабря"];

day.text = weekDays[today.getDay()];

date.text = today.getDate();

month.text = months[today.getMonth()];

year.text = today.getFullYear();

  1. Проверьте работу фильма.

В первой строчке мы остановили проигрывание, поскольку все изменения выполняются из программы. Затем в массивы weekDays и months записаны названия дней недели и месяцев (учитывая, что неделя у американцев начинается с воскресенья).

Затем в текстовые поля записываются данные сегодняшнего дня, причем некоторые из них выбираются из массивов.

С выводом времени дело обстоит несколько сложнее, его надо обновлять раз в секунду. Сначала добавим текстовое поле и напишем функцию, которая должна выводить в него время.

  1. Добавьте текстовое поле под листом календаря и дайте ему кодовое имя time. В код кадра 1 добавьте функцию

function showTime() {

function str2(n) {

var s = String(n);

if (n<10) {

s = "0"+s;

}

return s;

}

today = new Date();

h = today.getHours();

m = today.getMinutes();

s = today.getSeconds();

time.text = str2(h)+":"+str2(m)+":"+str2(s);

}

Эта функция содержит внутреннюю функцию str2, которая принимает целое число n и переводит его в строку с помощью функции String. Затем, если число было меньше 10, к строке спереди добавляется ноль. Это сделано затем, чтобы, скажем, время 5 часов 3 минуты и 2 секунды изображались как 05:03:02, а не 5:3:2.

В основной части функции создается новый объект Date, содержащий текущую дату и время. С помощью методов getHours, getMinutes и getSeconds из него извлекаются часы, минуты и секунды. Далее они переводятся в символьный вид с помощью функции str2 и объединенная строка записывается в свойство text поля time. Функцию showTime надо вызывать периодически с интервалом не менее 1 секунды. В среде Flash есть такое средство.

  1. Добавьте к коду кадра 1 строчку

setInterval ( showTime, 200 );

и проверьте работу клипа.

Первый параметр функции setInterval — это функция, которую надо вызывать, а второй — интервал между вызовами в миллисекундах.

Таймер

  1. Добавьте на поле четыре надписи (Static Text): время, сек, повторить и раз, а также два поля ввода (Input Text) с именами alarmTime (время сигнала) и loops (повторы). Добавьте в нужное место кнопку Пуск из библиотеки.

  1. В кадр 1 слоя Программа добавьте присвоение начальных значений:

alarmTime.text = "10";

loops.text = "1";

Дайте звукам из библиотеки имена tick (тиканье) и alarm (будильник). Для этого надо выбрать пункт Linkage... из контекстного меню. В появившемся окне отметьте флажки Export for ActionScript и Export in first frame, введите имя звука в поле Identifier.

Для отслеживания времени будем использовать внутренний таймер. Вызов функции

t = getTimer();

записывает в переменную t количество миллисекунд, прошедшее с начала проигрывания фильма. Для будильника нам нужна разница между текущим временем и временем начала отсчета, которое мы запомним в специальной переменной startTime.

В другой переменной, alarmOn будем запоминать состояний будильника (включен или выключен). Теперь можно написать код для кнопки: при ее нажатии включается будильник и запоминается время начала отсчета.

  1. Добавьте код обработчика для кнопки:

on (release) {

clock.alarmOn = true;

clock.startTime = getTimer();

}

Остальная работа выполняется клипом clock: вращение стрелки, тиканье раз в секунду и выдача сигнала будильника.

  1. Добавьте к клипу-секундомеру код обработчика enterFrame:

onClipEvent (enterFrame) {

if ( !alarmOn ) return;

t = Number(_root.alarmTime.text);

diff = Math.round((getTimer()-startTime)/1000);

if (hand._rotation != diff*6) {

hand._rotation = diff*6;

tick = new Sound();

tick.attachSound("tick");

tick.start(0,1);

}

if (diff == t) Alarm();

}

Если будильник не включили, ничего делать не надо и функция заканчивает работу.

В переменную t записывается числовое значение установленного времени, для перевода из символьной строки в число используется функция Number.

Разница между текущим и стартовым временем переводится в секунды из миллисекунд (делением на 1000) и округляется до ближайшего целого числа с помощью функции Math.round, которая относится к объекту Math (математика).

Если вспомнить, что за 1 секунду стрелка должна повернуться на 6(=360/60) градусов, то нужный угол поворота стрелки равен diff*6. Если стрелку надо «довернуть», изменяем ее свойство _rotation и 1 раз проигрываем звук tick из библиотеки.

Если разница diff совпала с установленным временем t, вызывается функция Alarm, которую мы сейчас напишем. В ней надо отключить будильник, вернуть стрелку в исходное положение и проиграть звук alarm из библиотеки нужное число раз.

  1. Введите код обработчика события load для клипа:

onClipEvent (load) {

function Alarm() {

alarmOn = false;

hand._rotation = 0;

snd = new Sound();

snd.attachSound("alarm");

snd.start(0,_root.loops.text);

}

}

  1. Проверьте работу будильника.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]