ActionScriptで時計

前回の1-4の、やり残し。

ブラウザで無料ではじめるActionScript 3.0 ―It's a wonderfl world―

ブラウザで無料ではじめるActionScript 3.0 ―It's a wonderfl world―


1-4では時計を作っていたのだけど、まだ自分で作ってみてなかったので作ってみた。
時計を作ってみる - wonderfl build flash online
要は適当なループで時刻をチェックし、時刻が変更されていたら表示を変えればいい、というだけ?
ENTER_FRAME内でやるか、timerで間隔あけてチェックするかでマシンへの負荷が変わったりするのかも知れない。


あと前回覚えたビットマップエフェクトを使ってちょっとカッコよく数字が変化するようにしてみた。

// forked from sugyan's 時計を作ってみる
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BlurFilter;
    import flash.geom.Point;

    [SWF(width="465", height="465", backgroundColor="0x000000")]
    public class FlashTest extends Sprite {
        private var _prevH:Number;
        private var _prevM:Number;
        private var _prevS:Number;
        private var _texts:Array = [
            new MyText(  1, 120),
            new MyText( 73, 120),
            new MyText(161, 120),
            new MyText(233, 120),
            new MyText(321, 120),
            new MyText(393, 120),
        ];
        private var _bmp:Bitmap = new Bitmap();
        private var _bmd:BitmapData = new BitmapData(465, 465, true, 0xFFFFFF);
        private var _filter:BlurFilter = new BlurFilter();
        
        public function FlashTest() {
            _bmp.bitmapData = _bmd;
            _filter.quality = BitmapFilterQuality.HIGH;
            addChild(_bmp);
            var colon1:MyText = new MyText(130, 110, ":");
            var colon2:MyText = new MyText(290, 110, ":");
            addChild(colon1);
            addChild(colon2);
            for (var i:int = 0; i < _texts.length; i++) {
                addChild(_texts[i]);
            }
            addEventListener(Event.ENTER_FRAME, function (event:Event):void {
                var date:Date = new Date();
                var second:Number = date.seconds;
                var minute:Number = date.minutes;
                var hour:Number   = date.hours;
                if (hour != _prevH) {
                    var h:Number = hour % 10;
                    _changeText(_texts[1], h);
                    if (h != 0 || _texts[0].isEmpty()) {
                        _changeText(_texts[0], (hour - h) / 10);
                    }
                    _prevH = hour;
                }
                if (minute != _prevM) {
                    var m:Number = minute % 10;
                    _changeText(_texts[3], m);
                    if (m == 0 || _texts[2].isEmpty()) {
                        _changeText(_texts[2], (minute - m) / 10);
                    }
                    _prevM = minute;
                }
                if (second != _prevS) {
                    var s:Number = second % 10;
                    _changeText(_texts[5], s);
                    if (s == 0 || _texts[4].isEmpty()) {
                        _changeText(_texts[4], (second - s) / 10);
                    }
                    _prevS = second;
                }
                _bmd.applyFilter(_bmd, _bmd.rect, new Point(0, 0), _filter);
            });
        }
        
        private function _changeText(text:MyText, num:Number):void {
            _bmd.draw(text);
            text.changeText(num);
        }
    }
}


import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;

class MyText extends Sprite {
    private var _text:TextField = new TextField();
    public function MyText(x:Number, y:Number, initText:String = "") {
        addChild(_text);

        _text.x = x;
        _text.y = y;
        _text.width = 72;
        _text.background = false;

        var format:TextFormat = new TextFormat();
        format.color = 0xFFFFFF;
        format.size = 150;
        _text.defaultTextFormat = format;

        _text.text = initText;
    }
    
    public function isEmpty():Boolean {
        if (_text.text.length > 0) {
            return false;
        }
        return true;
    }

    public function changeText(num:Number):void {
        _text.text = num.toString();
    }
}

出来たもの -> forked from: 時計を作ってみる - wonderfl build flash online


なんかキレイなコードの書き方がわからないなー