Większość kodu w klasie AnalogClockFace class ma za zadanie przygotowanie wyświetlanych elementów tarczy zegara. Podczas inicjowania klasy AnalogClockFace rysowany jest okrąg, etykiety tekstowe na znacznikach godzin oraz trzy obiekty Shape reprezentujące wskazówki godzin, minut i sekund.
Po uruchomieniu aplikacja SimpleClock co sekundę wywołuje metodę
AnalogClockFace.draw()
:
/**
* Called by the parent container when the display is being drawn.
*/
public override function draw():void
{
// stores the current date and time in an instance variable
currentTime = new Date();
showTime(currentTime);
}
Metoda ta zapisuje bieżący czas w zmiennej, przez co czas nie może zmienić się w trakcie rysowania wskazówek. Następnie wywołuje metodę
showTime()
w celu wyświetlenia wskazówek, co zilustrowano poniżej:
/**
* Displays the given Date/Time in that good old analog clock style.
*/
public function showTime(time:Date):void
{
// gets the time values
var seconds:uint = time.getSeconds();
var minutes:uint = time.getMinutes();
var hours:uint = time.getHours();
// multiplies by 6 to get degrees
this.secondHand.rotation = 180 + (seconds * 6);
this.minuteHand.rotation = 180 + (minutes * 6);
// Multiply by 30 to get basic degrees, then
// add up to 29.5 degrees (59 * 0.5)
// to account for the minutes.
this.hourHand.rotation = 180 + (hours * 30) + (minutes * 0.5);
}
Metoda ta najpierw wyodrębnia wartości godzin, minut i sekund z bieżącego czasu. Następnie na podstawie tych wartości oblicza kąty poszczególnych wskazówek. Ponieważ wskazówka sekund wykonuje pełny obrót w ciągu 60 sekund, obraca się o 6 stopni w każdej sekundzie (360/60). Wskazówka minut obraca się o taki sam kąt co minutę.
Położenie wskazówki godzin jest aktualizowane co minutę, tak aby odzwierciedlić upływ minut. Wskazówka godzin obraca się o 30 stopni co godzinę (360/12), ale także o pół stopnia co minutę (30 stopni podzielone na 60 minut).