root/as2/TeraClock/src/uranodai/utils/TeraClock.as

リビジョン 1776, 3.1 kB (コミッタ: chabudai, コミット時期: 1 年 前)

AS3.0バージョンに追加されてるアナログ時計の機能を追加

Line 
1 import mx.events.EventDispatcher;
2 import mx.utils.Delegate;
3 /**
4 * ...
5 * @author uranodai
6 */
7
8 class uranodai.utils.TeraClock
9 {
10         public static var HOURS_CHANGED:String = "hoursChanged";
11         public static var MINUTES_CHANGED:String = "minutesChanged";
12         public static var SECONDS_CHANGED:String = "secondsChanged";
13        
14         private var _hours:Number;
15         private var _minutes:Number;
16         private var _seconds:Number;
17         private var _preSeconds:Number;
18         private var _gmt:Number;
19        
20         public var addEventListener:Function;
21     public var removeEventListener:Function;
22     private var dispatchEvent:Function;
23        
24         // コンストラクタ関数。引数でタイムゾーンを設定できる。デフォルトは+9:00(日本)
25         public function TeraClock(mc:MovieClip, GMT:Number)
26         {
27                 EventDispatcher.initialize(this);
28                
29                 if (GMT == undefined) GMT = 9; 
30                 _gmt = GMT % 24;
31                 enterFrameListener();
32                 mc.onEnterFrame = Delegate.create(this, enterFrameListener);
33         }
34        
35         public function enterFrameListener():Void
36         {
37                 var date:Date = new Date();
38                
39                 if(_gmt>=0){
40                         _hours = (date.getUTCHours() + _gmt) % 24;
41                 }else {
42                         _hours = (24+(date.getUTCHours() + _gmt)) % 24;
43                 }
44                 _minutes = date.getUTCMinutes();
45                 _seconds = date.getUTCSeconds();
46                 if (_seconds != _preSeconds) {
47                         //trace(_hours + ":" + _minutes + ":" + _seconds);
48                         dispatchEvent( { type:SECONDS_CHANGED } );
49                         if (_seconds == 0) {
50                                 dispatchEvent( { type:MINUTES_CHANGED } );
51                                 if (_minutes == 0) {
52                                         dispatchEvent( { type:HOURS_CHANGED } );
53                                 }
54                         }
55                 }
56                 _preSeconds = _seconds;
57                 //trace(this);
58         }
59        
60         // 外部から値を取得するためのゲッター。セッターはとりあえずいらないや。
61         public function get hours():Number { return _hours; }
62         public function get minutes():Number { return _minutes; }
63         public function get seconds():Number { return _seconds; }
64         // 上位1桁返す
65         public function get hoursUpper():Number { return Math.floor(_hours / 10); }
66         public function get minutesUpper():Number { return Math.floor(_minutes / 10); }
67         public function get secondsUpper():Number { return Math.floor(_seconds / 10); }
68         // 下位1桁返す
69         public function get hoursLower():Number { return _hours % 10; }
70         public function get minutesLower():Number  { return _minutes % 10; }
71         public function get secondsLower():Number { return _seconds % 10; }
72         // 1桁の数の時を2桁にする。返り値は String 型になる。
73         public function get hours2():String { return niketa(_hours); }
74         public function get minutes2():String { return niketa(_minutes); }
75         public function get seconds2():String { return niketa(_seconds); }
76         // 2桁にして返す関数
77         private function niketa(num:Number):String {
78                 if (num < 10) {
79                         return String("0"+num);
80                 }else {
81                         return String(num);
82                 }
83         }
84        
85         //アナログ時計にした時の針の角度を返す。
86         public function get hoursDegree():Number {
87                 return ((_hours % 12) * 30) + (_minutes / 2) + (_seconds/120);
88         }
89         public function get minutesDegree():Number {
90                 return (_minutes * 6) + (_seconds / 10);
91         }
92         public function get secondsDegree():Number {
93                 return _seconds * 6;
94         }
95 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。