Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
материал. часть2 / Розенцвейг_Adobe_Flash_Создание аркад, головоломок и других игр с помощью ActionScript.rtf
Скачиваний:
52
Добавлен:
11.02.2016
Размер:
9.87 Mб
Скачать

Подготовка ролика

При помощи объекта Date можно создать интересные часы. Переводя значения часов, минут и секунд текущего времени в градусы, вы можете задать параметр _rotation трех различных клипов таким образом, чтобы они двигались, как стрелки часов.

На рис. 6.10 показан внешний вид таких часов. Короткая рука обозначает часовую, длинная – минутную, а хвост – секундную стрелки.

Рисунок 6.10. Часы показывают 9 часов 20 минут 35 секунд

На рисунке не видно, что руки (и хвост) часов двигаются подобно стрелкам настоящих часов. Эти действия выполняются в три этапа. Вначале полученное значение текущего времени помещается в переменные hour, minute и second. Затем значения этих переменных преобразуются в значения углов. Далее полученные значения используются для задания параметра _rotation трех клипов, представляющих руки и хвост.

Создание кода

Код, который выполняет все вышеописанные действия, – это сценарий onClipEvent (enterFrame), помещаемый в клип. Код можно посмотреть в файле Simpleclock.fla на Web‑сайте.

onClipEvent (enterFrame) {

// Узнаем текущее время.

now = new Date();

hour = now.getHours();

minute = now.getMinutes();

second = now.getSeconds();

// Конвертируем в значение для 12‑часового дня.

if (hour > 12) {

hour ‑= 12;

}

// Рассчитываем углы для поворота стрелок.

hourAngle = 360*hour/12;

minuteAngle = 360*minute/60

secondAngle = 360*second/60;

// Поворачиваем сами ролики.

_root["hour hand"]._rotation = hourAngle;

_root[ "minute hand"]._rotation = minuteAngle;

_root[ "second hand"]._rotation = secondAngle;

}

Чтобы определить значение углов, значение времени делится на наибольшее возможное значение и умножается на 360. Например, значение минут делится на 60, в результате чего получается значение между 0 и 1, а затем умножается на 360, что дает значение угла между 0° и 360°. Чтобы стрелка была 12‑, а не 24‑часовой, из значения часов вычитается 12.

Результатом каждой операции является угол от 0° до 360°. 0° обозначает 0 (или 12) часов, 0 минут, 0 секунд. В данном случае изображения всех трех клипов, представляющих стрелки часов, будут указывать вверх (рис. 6.11). Затем, после задания параметра _rotation, стрелки будут указывать на соответствующее место.

Рисунок 6.11. Руки и хвост (то есть стрелки часов), направленные четко вверх, соответствуют 12:00:00. Когда вы зададите параметр _rotation, стрелки будут указывать в соответствующем направлении

Проблема состоит в том, что устройство будет работать не совсем как обычные часы. Например, на рис. 6.10 часовая стрелка указывает на 9 часов. Она будет продолжать указывать на отметку 9, даже когда будет 9:59, а затем в 10:00 сразу передвинется на отметку 10.

В настоящих часах часовая стрелка будет в течение часа постепенно передвигаться, пока не достигнет отметки 10 в 10 часов. Для того чтобы получить такой результат, необходимо немного увеличивать угол часовой стрелки каждую минуту и угол минутной стрелки каждую секунду. Приведем соответствующий код:

// Задаем угол поворота для минутной и секундной стрелки.

hourAngle += minute/2;

minuteAngle += second/10;

Минута делится на 2, что дает вам дополнительно 30° для поворота часовой стрелки каждый час. Секунда делится на 10, благодаря чему вы получаете 6 дополнительных градусов для промежуточных поворотов минутной стрелки. Выполним вычисления: в 9:59 угол будет составлять 9*30 + 59/2 = 270 + 29.5 = 299.5. В 10:00 угол составит 10*30 + 0/2 = = 300 + 0 = 300.

Подобным образом, в 20 минут 59 секунд угол минутной стрелки составит 20*6 + 59/10 = 120 + 5.9 = 125.9. Еще через секунду угол будет равен 21*6 + 0/10 = 126 + 0 = 126.

На рис. 6.12 показаны часы, в код которых добавлена эта часть кода. Сравнив его с рис. 6.10, вы увидите, что положение часовой и минутной стрелок стало более точным.

Рисунок 6.12. В результате изменения кода часовая и минутная стрелки часов стали указывать время более точно

Файл Betterclock.fla содержит дополнительный код, сглаживающий движение стрелок. Обратите внимание, что с изменением времени минутная стрелка понемногу передвигается.

Соседние файлы в папке материал. часть2