Немного изменил ранее созданный пример с механическими флеш-часиками на ActionScript 3.0 и получил класс ClockOffline. Класс совершенно простенький.
Код ActionScript 3.0:
/*
@edapskov v 1.0
*/
package
{
/*
подключаем необходимые классы
*/
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
/*
тело класса
*/
public class ClockOffline extends Sprite
{
/*
константы
*/
private const _TIMER:uint = 1000;
/*
переменные
*/
private var _clockH:Sprite;
private var _clockM:Sprite;
private var _clockS:Sprite;
/*
функция-конструктор
*/
public function ClockOffline(r:uint = 100,fill:uint = 0xffffff,line:uint = 0x333333):void
{
/*
спрайт-контейнер
*/
var cont:Sprite = new Sprite();
addChild(cont);
/*
табло часов
*/
var tabl:Sprite = new Sprite();
cont.addChild(tabl);
tabl.graphics.lineStyle(3,line,1);
tabl.graphics.beginFill(fill,1);
tabl.graphics.drawCircle(0,0,r);
tabl.x = r;
tabl.y = r;
/*
часовая стрелка
*/
_clockH = new Sprite();
tabl.addChild(_clockH);
_clockH.graphics.lineStyle(3,line,1);
_clockH.graphics.moveTo(0,5);
_clockH.graphics.lineTo(0,-(r/6*3));
/*
минутная стрелка
*/
_clockM = new Sprite();
tabl.addChild(_clockM);
_clockM.graphics.lineStyle(2,line,1);
_clockM.graphics.moveTo(0,5);
_clockM.graphics.lineTo(0,-(r/6*4));
/*
секундная стрелка
*/
_clockS = new Sprite();
tabl.addChild(_clockS);
_clockS.graphics.lineStyle(1,line,1);
_clockS.graphics.moveTo(0,5);
_clockS.graphics.lineTo(0,-(r/6*5));
/*
перерисовываем наши часы по таймеру
*/
var timer:Timer = new Timer(_TIMER);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
/*
устанавливаем время на часах
*/
tic();
}
/*
функция, срабатывающая по таймеру
*/
private function onTimer(event:TimerEvent):void
{
tic();
}
/*
функция, перерисовывающая наши часики
*/
private function tic():void
{
var d:Date = new Date();
var h:Number = d.getHours();
var m:Number = d.getMinutes();
var s:Number = d.getSeconds();
if (h>12)
{
h -= 12;
}
var hAngle:Number = (360*h/12)+(0.5*m);
var mAngle:Number = 360 * m / 60;
var sAngle:Number = 360 * s / 60;
_clockH.rotation = hAngle;
_clockM.rotation = mAngle;
_clockS.rotation = sAngle;
}
}
}
Использовать данный класс тоже невероятно просто. Всего пара строчек кода.
Код ActionScript 3.0:
/*
импортируем класс
*/
import ClockOffline;
/*
создаём экземпляр класса ClockOffline
*/
var clock:ClockOffline = new ClockOffline();
/*
добавляем в список отображения
*/
addChild(clock);
Результат будет следующим:
В качестве параметров классу можно передать следующие значения:
- радиус циферблата (по умолчанию стоит 100 px);
- цвет заливки циферблата (по умолчанию стоит белая заливка);
- цвет стрелок и обводки циферблата (по умолчанию стоит тёмно-серый цвет - 0x333333).
Для примера создадим часы с радиусом 150 px, красной обводкой/стрелками (0xff0000) и светло-серой заливкой (0xcccccc).
Код ActionScript 3.0:
/*
импортируем класс
*/
import ClockOffline;
/*
создаём экземпляр класса ClockOffline
*/
var clock:ClockOffline = new ClockOffline(150,0xcccccc,0xff0000);
/*
добавляем в список отображения
*/
addChild(clock);
Результат будет следующим:
Исходник под Adobe Flash CS5.5 и класс ClockOffline скачать можно здесь.