Electrogram clock HaraMakoto forked:29favorite:10lines:229license : MIT License modified : 2009-12-17 12:56:57 Embed Tweet package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.geom.Matrix; import flash.geom.Point; [SWF(width="465", height="465", backgroundColor="0x0", frameRate="90")] public class ElectrogramClock extends Sprite { //線を引くためのクラス private var _line:DrawLine = new DrawLine(); //各数字の座標配列 private var _line0:Array=[{x:-4.14,y:51.775},{x:4.735,y:51.837},{x:9.86,y:47.775},{x:14.11,y:30.15},{x:24.36,y:8.775},{x:39.423,y:-0.413},{x:47.36,y:-1.725},{x:49.63,y:-1.474},{x:50.383,y:2.419},{x:42.321,y:3.258},{x:26.198,y:13.166},{x:15.197,y:42.389},{x:14.776,y:71.612},{x:27.206,y:94.284},{x:57.772,y:105.872},{x:85.483,y:94.537},{x:96.064,y:71.612},{x:96.735,y:42.306},{x:87.33,y:16.527},{x:67.932,y:4.77},{x:55.084,y:3.09},{x:53.284,y:0.932},{x:57.86,y:-1.225},{x:70.548,y:0.962},{x:81.36,y:5.775},{x:90.61,y:15.087},{x:96.86,y:26.275},{x:99.86,y:35.337},{x:101.36,y:43.275},{x:101.11,y:49.462},{x:103.86,y:52.275},{x:108.36,y:52.275},{x:109.86,y:52.275}]; private var _line1:Array=[{x:-5.916,y:50.071},{x:-2.446,y:50.337},{x:5.827,y:50.603},{x:14.368,y:45.733},{x:18.104,y:38.861},{x:17.914,y:30.099},{x:25.207,y:21.299},{x:32.261,y:19.198},{x:43.346,y:14.579},{x:53.422,y:6.267},{x:59.468,y:0.472},{x:59.468,y:51.193},{x:59.468,y:101.913},{x:64.073,y:103.348},{x:74.684,y:95.975},{x:83.091,y:68.885},{x:92.298,y:50.603},{x:103.441,y:50.603},{x:107.778,y:50.603}]; private var _line2:Array=[{x:-5.013,y:45.603},{x:-0.142,y:45.603},{x:9.933,y:44.002},{x:14.989,y:36.404},{x:14.842,y:30.406},{x:15.346,y:22.932},{x:18.872,y:8.907},{x:29.789,y:-1.42},{x:45.744,y:-5.199},{x:66.402,y:-1.925},{x:82.021,y:14.954},{x:79.838,y:35.529},{x:70.601,y:46.529},{x:55.485,y:56.606},{x:38.355,y:66.682},{x:23.743,y:76.339},{x:12.155,y:95.569},{x:49.774,y:95.569},{x:87.394,y:95.569},{x:92.434,y:93.272},{x:97.473,y:86.17},{x:97.272,y:63.218},{x:100.674,y:45.071},{x:106.212,y:45.071},{x:108.146,y:45.071}]; private var _line3:Array=[{x:0.491,y:46.071},{x:5.162,y:46.604},{x:13.836,y:45.536},{x:20.273,y:41.428},{x:22.707,y:28.717},{x:24.89,y:17.046},{x:38.159,y:-0.169},{x:66.961,y:-4.117},{x:91.229,y:8.564},{x:93.161,y:28.718},{x:86.527,y:38.794},{x:71.831,y:42.322},{x:53.608,y:44.84},{x:65.785,y:45.68},{x:84.513,y:49.544},{x:94.336,y:59.621},{x:96.604,y:75.743},{x:86.694,y:90.943},{x:67.717,y:98.584},{x:46.892,y:98.752},{x:30.098,y:91.866},{x:22.036,y:78.095},{x:20.021,y:64.323},{x:18.062,y:63.737},{x:16.505,y:67.954},{x:18.974,y:79.831},{x:23.444,y:89.305},{x:29.782,y:95.777},{x:46.93,y:101.048},{x:66.479,y:101.983},{x:83.227,y:97.312},{x:97.172,y:89.172},{x:101.908,y:78.63},{x:102.175,y:63.418},{x:102.442,y:51.407},{x:106.846,y:46.937},{x:113.652,y:46.071}]; private var _line4:Array=[{x:-6.916,y:36.091},{x:1.521,y:38.716},{x:3.584,y:46.591},{x:3.834,y:70.716},{x:11.584,y:89.591},{x:42.461,y:89.588},{x:65.839,y:89.584},{x:65.839,y:39.536},{x:65.839,y:-10.512},{x:36.616,y:25.093},{x:7.393,y:60.698},{x:48.037,y:60.698},{x:88.681,y:60.698},{x:91.383,y:58.832},{x:94.084,y:52.091},{x:92.646,y:41.654},{x:97.584,y:36.091},{x:105.021,y:36.091},{x:106.084,y:36.091}]; private var _line5:Array=[{x:-14.916,y:49.091},{x:-3.604,y:49.466},{x:0.584,y:55.091},{x:1.146,y:62.466},{x:5.084,y:64.591},{x:8.482,y:68.136},{x:8.506,y:71.682},{x:12.536,y:87.888},{x:24.629,y:98.553},{x:43.438,y:102.836},{x:66.277,y:98.553},{x:82.401,y:80.667},{x:82.401,y:56.231},{x:68.919,y:40.137},{x:44.109,y:35.406},{x:20.093,y:43.468},{x:11.192,y:51.529},{x:17.574,y:26.672},{x:23.956,y:1.816},{x:52.171,y:1.816},{x:80.386,y:1.816},{x:83.485,y:2.703},{x:86.584,y:12.591},{x:86.834,y:30.904},{x:87.084,y:43.591},{x:88.209,y:48.029},{x:91.584,y:49.091},{x:96.209,y:49.341},{x:98.584,y:49.591}]; private var _line6:Array=[{x:-1.416,y:45.091},{x:7.959,y:46.966},{x:12.084,y:54.091},{x:14.879,y:58.473},{x:17.675,y:57.606},{x:31.698,y:36.613},{x:55.294,y:30.733},{x:80.738,y:41.146},{x:91.57,y:65.667},{x:79.227,y:91.699},{x:49.248,y:100.599},{x:23.132,y:86.323},{x:15.659,y:67.01},{x:14.735,y:43.077},{x:20.361,y:14.611},{x:39.423,y:-1.932},{x:66.044,y:-2.856},{x:84.854,y:11.001},{x:89.555,y:21.329},{x:90.507,y:33.46},{x:95.584,y:45.591},{x:105.646,y:45.591},{x:111.584,y:45.591}]; private var _line7:Array=[{x:-5.416,y:43.591},{x:5.084,y:34.216},{x:8.084,y:18.091},{x:11.319,y:5.002},{x:22.067,y:-1.338},{x:57.336,y:-1.338},{x:92.604,y:-1.338},{x:77.91,y:14.785},{x:57.672,y:40.985},{x:47.175,y:69.368},{x:42.22,y:96.743},{x:48.277,y:99.355},{x:59.584,y:92.591},{x:72.459,y:63.654},{x:90.584,y:44.091},{x:104.334,y:44.091},{x:107.584,y:44.091}]; private var _line8:Array=[{x:-3.916,y:52.091},{x:26.446,y:52.082},{x:60.569,y:50.366},{x:70.479,y:48.939},{x:85.426,y:40.962},{x:88.953,y:24.083},{x:77.365,y:8.716},{x:49.989,y:4.685},{x:25.638,y:12.745},{x:20.011,y:28.45},{x:22.951,y:39.619},{x:29.836,y:46.421},{x:45.791,y:51.711},{x:68.043,y:52.55},{x:86.769,y:60.444},{x:94.495,y:79.841},{x:88.113,y:96.72},{x:72.411,y:105.789},{x:51.166,y:108.812},{x:30.339,y:104.448},{x:17.576,y:94.033},{x:14.469,y:77.994},{x:18.92,y:64.474},{x:27.149,y:57.337},{x:36.385,y:53.726},{x:61.484,y:52.908},{x:92.584,y:52.091},{x:103.584,y:52.341},{x:108.584,y:52.591}]; private var _line9:Array=[{x:-9.416,y:46.591},{x:4.084,y:48.966},{x:11.584,y:56.591},{x:12.34,y:68.304},{x:13.096,y:74.767},{x:25.775,y:95.087},{x:48.027,y:100.295},{x:69.357,y:93.661},{x:85.648,y:67.376},{x:86.992,y:32.36},{x:80.273,y:10.947},{x:65.242,y:-0.39},{x:42.654,y:-3.161},{x:21.577,y:4.733},{x:11.08,y:25.727},{x:15.446,y:49.323},{x:29.889,y:61.33},{x:52.31,y:63.934},{x:74.228,y:55.957},{x:84.473,y:38.742},{x:85.648,y:29.084},{x:86.929,y:25.588},{x:91.584,y:22.091},{x:97.021,y:26.654},{x:99.084,y:34.591},{x:99.084,y:42.779},{x:103.584,y:47.591}]; //全部入り配列 private var _allTimeList:Array; //現在表示の時間の座標配列 private var _displayTimeList:Array = new Array(); //時計クラス private var _clock:clockMaster = new clockMaster(); //残像表示のためのbitmap private var _bmp:Bitmap = new Bitmap(); private var _bmd:BitmapData = new BitmapData(465, 465,true,0); private var Mtx:Matrix = new Matrix(); public function ElectrogramClock() { _step1_setDisplay(); _step2_setClock(); _step3_setBmpEffect(); } //step1 表示オブジェクトの配置と配列の設定 private function _step1_setDisplay():void { _allTimeList = [ _line0,_line1,_line2,_line3,_line4,_line5,_line6,_line7,_line8,_line9 ]; addChild(_bmp); addChild(_line); } //step2 時計を設定する private function _step2_setClock():void { _refleshDisplay(); //時間を時計に反映 _clock.addEventListener(ClockEvent.SECONDS_CHANGED, _secHandler); _clock.addEventListener(ClockEvent.MINUTES_CHANGED, _minHandler); } private function _secHandler(e:ClockEvent):void { _line.getListAndDraw(_displayTimeList); } private function _minHandler(e:ClockEvent):void { _refleshDisplay(); } //step3 残像効果を設定する private function _step3_setBmpEffect():void { _bmp.bitmapData = _bmd; addEventListener(Event.ENTER_FRAME, _enterFrameHandler); } private function _enterFrameHandler(e:Event):void { _bmd.draw(_line); _bmd.applyFilter(_bmd,_bmd.rect,new Point(0,0),new BlurFilter(4,4)); } //分が変わるごとに時計の表示をリフレッシュ private function _refleshDisplay():void { _displayTimeList = new Array(); var i:uint=0; var _xUnit:Number = 107; var len:int = _allTimeList[_clock.hoursUpper].length; for(i=0; i<len; i++) { _displayTimeList.push(new Point(_allTimeList[_clock.hoursUpper][i].x, _allTimeList[_clock.hoursUpper][i].y) ); } len = _allTimeList[_clock.hoursLower].length; for(i=0; i<len; i++) { _displayTimeList.push(new Point(_allTimeList[_clock.hoursLower][i].x+_xUnit, _allTimeList[_clock.hoursLower][i].y) ); } len = _allTimeList[_clock.minutesUpper].length; for(i=0; i<len; i++) { _displayTimeList.push(new Point(_allTimeList[_clock.minutesUpper][i].x+_xUnit*2, _allTimeList[_clock.minutesUpper][i].y) ); } len = _allTimeList[_clock.minutesLower].length; for(i=0; i<len; i++) { _displayTimeList.push(new Point(_allTimeList[_clock.minutesLower][i].x+_xUnit*3, _allTimeList[_clock.minutesLower][i].y) ); } _displayTimeList.push(new Point(470,47)); _displayTimeList.push(new Point(490,47+10)); _displayTimeList.push(new Point(520,47-10)); } } } import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import flash.display.DisplayObject; import flash.events.EventDispatcher; /** *指定の座標を配列で受け取って、順番に移動するクラス */ class DrawLine extends Sprite { private var _listLength:int; private var _counter:int = 0; private var _pointer:Sprite = new Sprite(); private var _positionList:Array; //座標の入った配列 private var lineBase:Sprite = new Sprite(); //線を描くレイヤー //尻尾を入れる配列 private var _tailList:Array = [ new Point(0,0), new Point(0,0), new Point(0,0), new Point(0,0), new Point(0,0) ]; private var tailLen:int = 5; public function DrawLine() { //表示オブジェクト設定 addChild(lineBase); addChild(_pointer); lineBase.y = 150; //先導ポインタの表示 _pointer.graphics.beginFill(0xFF0000,0); _pointer.graphics.drawCircle(0,0,2); _pointer.graphics.endFill(); } //配列を受け取って、配列内容を描画する public function getListAndDraw(arr:Array):void { _counter = 0; //カウンターを戻す //尻尾配列もリセット for(var i:int=0; i<tailLen; i++) { _tailList[i].x = 0; _tailList[i].y = 0; } _listLength = arr.length; //配列の長さを取得 _positionList = arr; //受け取った配列を取得 //二重起動防止用 if(hasEventListener(Event.ENTER_FRAME)) { removeEventListener(Event.ENTER_FRAME, _enterFrameHadler); } //毎フレームハンドラ実行 addEventListener(Event.ENTER_FRAME, _enterFrameHadler); } //毎フレーム実行関数 private function _enterFrameHadler(e:Event):void { _drawNext(); _drawNext(); _drawNext(); } //配列に入った座標に順番に移動していく。 private function _drawNext():void { if(_counter == _listLength) { removeEventListener(Event.ENTER_FRAME, _drawNext); lineBase.graphics.clear(); } else { _pointer.x = _positionList[_counter].x; _pointer.y = _positionList[_counter].y; _chase(); _drawLine(); _counter++; } } //尻尾の配列の中身を順番にスライドさせる。 private function _chase():void { for(var i:int=0; i<tailLen-1; i++) { _tailList[i].x = _tailList[i+1].x; _tailList[i].y = _tailList[i+1].y; } _tailList[tailLen-1].x = _pointer.x; _tailList[tailLen-1].y = _pointer.y; } //尻尾の配列の座標を線でつなぐ。 private function _drawLine():void { lineBase.graphics.clear(); lineBase.graphics.lineStyle(1,0xFFFFFF); lineBase.graphics.moveTo(_tailList[0].x, _tailList[0].y); for(var i:int=0; i<tailLen; i++) { lineBase.graphics.lineTo(_tailList[i].x, _tailList[i].y); } } } /** *時計を管理するクラス。 */ class clockMaster extends EventDispatcher { private var _hours:int; private var _minutes:int; private var _seconds:int; private var preSeconds:int; private var _dispatcer:DisplayObject; public function clockMaster():void { _dispatcer = new Sprite(); enterFrameHandler(null); _dispatcer.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { var _date:Date = new Date(); //_hours = (24+(_date.getUTCHours() + _gmt)) % 24; _hours = (_date.getHours()); _minutes = _date.getMinutes(); _seconds = _date.getSeconds(); if (_seconds != preSeconds) { dispatchEvent(new ClockEvent(ClockEvent.SECONDS_CHANGED)); if (_seconds == 0) { dispatchEvent(new ClockEvent(ClockEvent.MINUTES_CHANGED)); if (_minutes == 0) { dispatchEvent(new ClockEvent(ClockEvent.HOURS_CHANGED)); } } } preSeconds = _seconds; } // 時間を返す public function get hours():int { return _hours; } public function get minutes():int { return _minutes; } public function get seconds():int { return _seconds; } // 上位1桁返す public function get hoursUpper():int { return _hours / 10; } public function get minutesUpper():int { return _minutes / 10; } public function get secondsUpper():int { return _seconds / 10; } // 下位1桁返す public function get hoursLower():int { return _hours % 10; } public function get minutesLower():int { return _minutes % 10; } public function get secondsLower():int { return _seconds % 10; } //アナログ時計にした時の針の角度を返す。 public function get hoursDegree():Number { return ((_hours % 12) * 30) + (_minutes / 2) + (_seconds/120); } public function get minutesDegree():Number { return (_minutes * 6) + (_seconds / 10); } public function get secondsDegree():Number { return _seconds * 6; } } /** *時計イベントクラス */ class ClockEvent extends Event { public static const HOURS_CHANGED:String = "hoursChanged"; public static const MINUTES_CHANGED:String = "minutesChanged"; public static const SECONDS_CHANGED:String = "secondsChanged"; public function ClockEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){ super(type, bubbles, cancelable); } public override function clone():Event { return new ClockEvent(type, bubbles, cancelable); } public override function toString():String{ return formatToString("ClockEvent", "type", "bubbles", "cancelable", "eventPhase"); } } Code Fullscreen Preview Fullscreen nunnuc ijeoma hacker_szoe5.. 7kamura thumb_bolt_o.. ngtn acidbaby bradsedito : \ halfmile : 脉搏跳动效果 ongaeshi : wonderbook wonderbook wonderfl本 dispatchEvent removeEventListener addEventListener push hasEventListener Point Date getSeconds getHours getMinutes EventDispatcher Array seconds hours minutes clone toString String Boolean BlurFilter sort new page view favorite forked pv72 forked from: Electrogram clock.. hytNInE forked:0 favorite:0lines:229 (diff:2) pv35 forked from: Electrogram clock.. MMMMMonchi forked:0 favorite:0lines:229 (diff:1) pv72 forked from: Electrogram clock.. chuson83 forked:0 favorite:0lines:229 (diff:1) pv61 forked from: Electrogram clock.. chuson83 forked:0 favorite:0lines:229 (diff:1) pv50 forked from: Electrogram clock.. photomotch forked:0 favorite:0lines:229 (diff:1) pv53 forked from: Electrogram clock.. ko-stinger forked:0 favorite:0lines:229 (diff:1) pv96 forked from: Electrogram clock.. hirohide forked:0 favorite:0lines:229 (diff:1) pv81 forked from: Electrogram clock.. 92-16 forked:0 favorite:0lines:229 (diff:1) 1 2 3 4NEXT