時計のような何か

by uwi
♥0 | Line 81 | Modified 2009-07-13 03:49:03 | MIT License
play

ActionScript3 source code

/**
 * Copyright uwi ( http://wonderfl.net/user/uwi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/mPI8
 */

package {
    import flash.display.*;
    import flash.events.*;
    
    [SWF(framerate="60")]
    public class FlashTest extends Sprite {
        private var _sec : Sprite;
        private var _min : Sprite;
        private var _hour : Shape;
        private var _cent : Sprite;
        
        public function FlashTest() {
            _cent = new Sprite();
            addChild(_cent);
            _cent.x = 465 / 2;
            _cent.y = 465 / 2;
            
            var r : Number = 240;
            var rate : Number = 0.4;
            
            var g : Graphics = _cent.graphics;
            g.lineStyle(4, 0x990000);
            g.drawCircle(0, 0, r);
            
            _sec = new Sprite();
            _cent.addChild(_sec);
            
            var rw : Number;
            
            var gs : Graphics = _sec.graphics;
            gs.lineStyle(4, 0x990000);
            drawWakame(gs, 0, r * 0.45, r * 0.06, r * 0.45, 35, 4.5, 0, r * 0.45);
            gs.lineStyle(2, 0x009900);
            gs.drawCircle(0, r * (1 + rate), r * rate);
            
            _min = new Sprite();
            _sec.addChild(_min);
            _min.x = 0;
            _min.y = r * (1 + rate);
            r *= rate;
            var gm : Graphics = _min.graphics;
            gm.lineStyle(2, 0x009900);
            drawWakame(gm, 0, r * 0.45, r * 0.06, r * 0.45, 35, 4, 0, r * 0.45);
            gm.lineStyle(1, 0x000099);
            gm.drawCircle(0, r * (1 + rate), r * rate);
            
            _hour = new Shape();
            _min.addChild(_hour);
            _hour.x = 0;
            _hour.y = r * (1 + rate);
            r *= rate;
            var gh : Graphics = _hour.graphics;
            gh.lineStyle(1, 0x000099);
            drawWakame(gh, 0, r * 0.45, r * 0.06, r * 0.45, 35, 10, 0, r * 0.45);
            
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
        private function onEnterFrame(e : Event) : void
        {
            var d : Date = new Date();
            var sec : Number = d.seconds + d.milliseconds / 1000;
            var min : Number = d.minutes + sec / 60;
            var hour : Number = d.hours + min / 60;
            
            _sec.rotation = sec * 6 - 180;
            _min.rotation = min * 6 - 180;
            _hour.rotation = hour * 30 - 180;
            
            _cent.x = 465 / 2 + Math.sin((sec * 6 - 180) * Math.PI / 180) * 240;
            _cent.y = 465 / 2 - Math.cos((sec * 6 - 180) * Math.PI / 180) * 240;
        }
        
        private static function drawWakame(g : Graphics, basex : Number, basey : Number, rx : Number, ry : Number, frac : Number, n : int, offsetx : Number, offsety : Number) : void
        {
            var theta : Number = frac * Math.PI / 180;
            var c2 : Number = Math.cos(theta) * Math.cos(theta);
            var cs : Number = Math.cos(theta) * Math.sin(theta);
            
            g.moveTo(basex + offsetx, basey + offsety);
            var fromx : Number = basex;
            var fromy : Number = basey;
            var b : Boolean = true;
            for(var t : Number = 0;t <= 360;t+=360/n){
                var tox : Number = -rx * Math.sin(t * Math.PI / 180);
                var toy : Number = ry * Math.cos(t * Math.PI / 180);
                var ancx : Number = c2 * (tox - fromx) + (b ? cs : -cs) * (toy - fromy) + fromx;
                var ancy : Number = (b ? -cs : cs) * (tox - fromx) + c2 * (toy - fromy) + fromy;
                g.curveTo(ancx + offsetx, ancy + offsety, tox + offsetx, toy + offsety);
                fromx = tox;
                fromy = toy;
                b = !b;
            }
        }
    }
}