+ -
当前位置:首页 → 问答吧 → 我给大家送“钟”来了。。。。

我给大家送“钟”来了。。。。

时间:2011-06-06

来源:互联网

本人表达能力差,不多说了。 复制一下哈。 纯as制作效果。
*学习要点,对Sprite的属性应用,坐标,旋转等,细节点的就是秒针的运行,as绘制UI。其它点击变换背景,拖动,滚轮放大。
       *重点是:白天看与晚上看是不一样的,脱了短裤与穿了短裤看效果也可以试试。。。

源文件看附件。
主要代码
复制内容到剪贴板
代码:
package mythl{
    /**
    *@author:MythLong;
    *[email protected];
    *学习要点,对Sprite的属性应用,坐标,旋转等,细节点的就是秒针的运行,as绘制UI。其它点击变换背景,拖动,滚轮放大。
    *重点是:白天看与晚上看是不一样的,脱了短裤与穿了短裤看效果也可以试试。。。
    *仅供学习参考,欢迎转载并美化,记得保留作者信息给我增加点名誉虚荣,谢谢啊。。 。  。
    *
    */
    import flash.display.*;
    //import flash.display.MovieClip;
    import flash.geom.*;
    import flash.events.*;
    import flash.text.*;
    import flash.filters.GlowFilter;
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    import flash.ui.*;
    public class Clock2 extends Sprite {
        /////////////
        private var _myDates:Date;
        private var date:uint;
        private var day:Array=["星期天","星期一","星期二","星期三","星期四","星期五","星期六"];
        private var month:uint;
        private var hour:uint;
        private var second:uint;
        private var minute:uint;
        private var year:uint;
        private var tween:Tween;
        private var _stagebg:Sprite;
        private var _bgColor:Number;
        private var _timecon:Sprite;
        private var _clockSkin:Sprite;
        private var _reflectHi:Sprite;
        private var _hourMC:Sprite;
        private var _minuteMC:Sprite;
        private var _secondMC:Sprite;
        private var _hour_Bs:Sprite;
        private var _minute_Bs:Sprite;
        private var _second_Bs:Sprite;
        private var _oldrot:Number;
        private var tmpangle:Number;
        private var _reAngle:int=90;
        private var _pinColor:Number=0xDDDDDD;///指针颜色
        private var _filter1:GlowFilter;
        private var _filter2:GlowFilter;
        private var daytext:TextField;
        private var _yeartext:TextField;
        private var format:TextFormat;
        private var format2:TextFormat;
        private var stageW:uint=stage.stageWidth;
        private var stageH:uint=stage.stageHeight;
        private var menulabel:Array;
        /////////
        public function Clock2() {
            //stage.displayState="fullScreen";
            //stage.align=StageAlign.TOP_LEFT;
            //stage.quality=StageQuality.LOW;
            //_pinColor=0xFFFFFF;///指针颜色
            format=new TextFormat();
            format.font="微软雅黑";
            format.size=12;
            format.color=0x000000;
            format.align=TextFormatAlign.RIGHT;
            //
            format2=new TextFormat();
            format2.font="_san";
            format2.bold=true;
            format2.size=12;
            format2.color=0xDDDDDD;
            format2.align=TextFormatAlign.LEFT;
            //trace(_myDates.getSeconds());
            _stagebg=new Sprite();
            stage.addChild(_stagebg);
            _init();
        }
        ///////////初始化状态。
        private function _init():void {
            menulabel=new Array("[email protected]","Author:MYTHLONG");
            _customMenu();
            _buildingBG();
            _buildingUI();
        }
        ///
        private function _changeBG(evt:MouseEvent):void {
            _buildingBG();
        }
        private function _mouseBG(evt:MouseEvent):void {
            _stagebg.alpha=mouseX/mouseY*.2;
            trace(mouseX/mouseY*.2);
        }
        ////
        private function _dragMC(evt:MouseEvent):void {
            evt.currentTarget.startDrag();
        }
        private function _stopdragMC(evt:MouseEvent):void {
            evt.currentTarget.stopDrag();
        }
        private function _zoomMC(evt:MouseEvent):void {
            if (evt.delta<0) {
                evt.currentTarget.scaleX=evt.currentTarget.scaleY-=.1;
                if (evt.currentTarget.scaleX<.1) {
                    evt.currentTarget.scaleX=evt.currentTarget.scaleY=.1;
                }
            } else if (evt.delta>0) {
                evt.currentTarget.scaleX=evt.currentTarget.scaleY+=.1;
            }
        }
        /////开始时间更新显示。
        private function _runtime(evt:Event):void {
            _myDates=new Date();
            if (second!=_myDates.getSeconds()) {
                date=_myDates.getDate();
                month=_myDates.getMonth();
                year=_myDates.getFullYear();
                /////
                hour=_myDates.getHours();
                minute=_myDates .getMinutes();
                second=_myDates.getSeconds();
                //_secondMC.rotation=second*360/60;
                tmpangle=second*360/60+6-_reAngle;
                //tmpangle<180?tmpangle:tmpangle=tmpangle-360;
                //trace(_oldrot+":"+tmpangle);
                tween=new Tween(_secondMC,"rotation",None.easeNone,_oldrot,tmpangle,.999,true);
                _minuteMC.rotation=minute*360/60+second*360/60/60-_reAngle;
                _hourMC.rotation=hour*360/12+minute*360/60/12-_reAngle;
                //trace(day[_myDates.getDay()]);
                daytext.text=(month+1)+"月"+date+"日"+day[_myDates.getDay()];
                //_yeartext.text=year+"年"+(month+1)+"月"+date+"日";
                if (_myDates.getHours()>6 &&_myDates.getHours()<19) {
                    _hour_Bs.alpha=1;
                    _second_Bs.alpha=1;
                    _minute_Bs.alpha=1;
                    _clockSkin.alpha=1;
                    _reflectHi.alpha=1;
                } else {
                    _hour_Bs.alpha=.1;
                    _second_Bs.alpha=.1;
                    _minute_Bs.alpha=.1;
                    _clockSkin.alpha=.1;
                    _reflectHi.alpha=.1;
                    daytext.appendText("XXX看到此信息说明你有穿短裤");
                    daytext.width=daytext.textWidth+5;
                }
            } else {
                _oldrot=_myDates.getSeconds()*360/60+6-_reAngle;
                if (_oldrot==270) {
                    _oldrot=-90;////这个判断是为了纠正秒针超过180度时,rotation变为负数,tween动画的问题。
                }
            }
            daytext.x+=(mouseX-daytext.x)/6;
            daytext.y+=(mouseY-daytext.y+daytext.height)/6;
        }
        /////////建立基本的时钟元素。
        private function _buildingUI():void {
            _timecon =new Sprite();
            //_timecon.rotation=-_reAngle;
            _timecon.x=300;
            _timecon.y=300;
            stage.addChild(_timecon);
            _clockSkin=_drawBody();
            _timecon.addChild(_clockSkin);
            ///////////
            var i:int=-1;
            while (++i<12) {
                var _label2:Sprite=_drawCircle(0x00FFAA,1,2,122,0,true,0x00FFAA,0xFFFFFF,0,0);
                _label2.rotation=360/12*i;
                _timecon.addChild(_label2);
            }
            _hourMC=new Sprite();
            _minuteMC=new Sprite();
            _secondMC=new Sprite();
            daytext=new TextField();
            daytext.defaultTextFormat=format;
            daytext.text="12月12日星期一";
            daytext.width=daytext.textWidth+2;
            daytext.height=daytext.textHeight+2;
            daytext.x=20;
            daytext.y=-10;
            daytext.mouseEnabled=false;
            daytext.background=true;
            daytext.backgroundColor=0xA3FED9;
            daytext.border=true;
            _yeartext=new TextField();
            _yeartext.defaultTextFormat=format;
            //_yeartext.background=true;
            _yeartext.autoSize=TextFieldAutoSize.CENTER;
            _yeartext.x=-_yeartext.width/2;
            _yeartext.y=-10;
            _yeartext.mouseEnabled=false;
            //_timecon.addChild(_yeartext);
            //_stagebg.addChild(daytext);
            stage.addChild(daytext);
            _timecon.addChild(_hourMC);
            _timecon.addChild(_minuteMC);
            _timecon.addChild(_secondMC);
            _hour_Bs =_drawSprite(_pinColor,.1,110,9,-25,-4,true,0x000000,0xFFFFFF,.25,.6);
            _hour_Bs.addChild(_drawCircle(_pinColor,.1,10,0,0,false,0x000000,0xFFFFFF,.25,.6));
            _hourMC.addChild(_hour_Bs);
            var _hour_Pt:Sprite=_drawSprite(0x00FFAA,1,20,5,60,-2,false,0x00FFAA,0xFFFFFF,0,0);
            _filter1=new GlowFilter(0x00FF00,1,3,3,2,2,true);
            _filter2=new GlowFilter(0x00FF00,1,8,8,2,2,false);
            _hour_Pt.filters=[_filter1,_filter2];
            _hourMC.addChild(_hour_Pt);
            _minute_Bs =_drawSprite(_pinColor,.1,130,5,-20,-2,true,0x000000,0xFFFFFF,.25,.6);
            _minute_Bs.addChild(_drawCircle(_pinColor,.1,6,0,0,false,0x000000,0xFFFFFF,.25,.6));
            _minuteMC.addChild(_minute_Bs);
            var _minute_Pt:Sprite=_drawSprite(0x11E8FF,1,20,3,82,-1,true,0x11B8FF,0xFFFFFF,0,0);
            _filter1=new GlowFilter(0x0055FF,1,3,3,2,2,true);
            _filter2=new GlowFilter(0x0055FF,1,8,8,2,2,false);
            _minute_Pt.filters=[_filter1,_filter2];
            _minuteMC.addChild(_minute_Pt);
            _second_Bs =_drawSprite(0xDD3300,.1,130,2,-10,-1,true,0x000000,0xFFFFFF,.25,.6);
            _second_Bs.addChild(_drawCircle(0xDD3300,.1,4,0,0,false,0x000000,0xFFFFFF,.25,.6));
            _secondMC.addChild(_second_Bs);
            var _second_Pt:Sprite=_drawSprite(0xFF7011,1,5,5,74,-79,true,0xFF1A1A,0xFFFFFF,0,0,45);
            _filter1=new GlowFilter(0xFF1A1A,1,3,3,2,2,true);
            _filter2=new GlowFilter(0xFF1A1A,1,8,8,2,2,false);
            _second_Pt.filters=[_filter1,_filter2];
            _secondMC.addChild(_second_Pt);
            ////
            ///////
            _reflectHi=_drawGraCir(134,.1,0,0x98,0x99,700,700,-380,-570,0xFFFFFF,0xFFFFFF);
            _timecon.addChild(_reflectHi);
            _reflectHi.addChild(_drawGraCir(134,.9,0,0x00,0x99,700,700,-380,-570,0xFFFFFF,0xFFFFFF));
            //_reflectHi.addChild(_drawGraCir(134,.6,0,0x40,0x45,700,700,-380,-570,0xFFFFFF,0xFFFFFF,true));
            _reflectHi.addChild(_drawGraCir(135,0,1,0xEE,0xFF,380,380,-180,-142,0xFFFFFF,0xFFFFFF,false));
            //_oldrot=_secondMC.rotation=second*360/60;
            _minuteMC.rotation=minute*360/60+second*360/60/60-_reAngle;
            _hourMC.rotation=hour*360/12+minute*360/60/12-_reAngle;
            stage.addEventListener(Event.ENTER_FRAME,_runtime);
            _timecon.addEventListener(MouseEvent.MOUSE_DOWN,_dragMC);
            _timecon.addEventListener(MouseEvent.MOUSE_UP,_stopdragMC);
            _timecon.addEventListener(MouseEvent.MOUSE_WHEEL,_zoomMC);
            _stagebg.addEventListener(MouseEvent.CLICK,_changeBG);
            //_stagebg.addEventListener(MouseEvent.MOUSE_MOVE,_mouseBG);
        }
        ////绘制时钟的刻度与表盘。
        private function _drawBody():Sprite {
            var _body:Sprite=new Sprite();
            //addChild(_body);
            var _bg:Sprite=new Sprite();
            _bg.graphics.beginFill(0x361BA9,1);
            _bg.graphics.drawCircle(0,0,135);
            _bg.filters=[new GlowFilter(0x000000,.7,12,12,2,2,false,true)];
            _body.addChild(_bg);
            ///////
            var _reflect:Sprite=_drawGraCir(135,0,.2,0xBB,0xFF,500,500,-280,-400,0xFFFFFF,0xFFFFFF);
            _body.addChild(_reflect);
            //_reflect.addChild(_drawGraCir(135,0,.1,0xCC,0xFF,340,340,-180,-220,0xFFFFFF,0xFFFFFF));
            _reflect.addChild(_drawGraCir(135,0,.6,0xEE,0xFF,276,276,-138,-138,0xFFFFFF,0xFFFFFF));
            _reflect.addChild(_drawGraCir(135,0,.6,0xEE,0xFF,280,280,-142,-150,0xFFFFFF,0xFFFFFF));
            _reflect.addChild(_drawGraCir(135,0,1,0xEE,0xFF,380,380,-200,-240,0xFFFFFF,0xFFFFFF,true));
            ///////////
            var j:int=-1;
            while (++j<60) {
                var _labelmin:Sprite=_drawSprite(0xEEEEEE,1,3,1,120,0,false,0x00FFAA,0xFFFFFF,0,0);
                _labelmin.rotation=360/60*j;
                _body.addChild(_labelmin);
            }
            ///////////
            var i:int=-1;
            while (++i<12) {
                var _label:Sprite=_drawSprite(_pinColor,.25,20,6,105,-3,true,0x000000,0xFFFFFF,1,.6);
                _label.rotation=360/12*i;
                _body.addChild(_label);
            }
            var _copyright:TextField=new TextField();
            _copyright.defaultTextFormat=format2;
            _copyright.text="MYTHLONG";
            _copyright.autoSize=TextFieldAutoSize.CENTER;
            _copyright.x=-_copyright.width/2;
            _copyright.y=60;
            _copyright.mouseEnabled=false;
            _body.addChild(_copyright);
            return _body;
        }
        //////绘制定义属性的RECT.
        private function _drawSprite(_Color:Number=0xDDDDDD,_ColorAlpha:Number=1,_W:uint=10,_H:uint=10,_X:int=0,_Y:int=0,_Shadow:Boolean=true,_ShadowColor:Number=0x000000,_lineColor:Number=0xFFFFFF,_lineSize:uint=0,_lineAlpha:Number=1,_Ro:int=0):Sprite {
            var _myMC:Sprite=new Sprite();
            _myMC.graphics.lineStyle(_lineSize,_lineColor,_lineAlpha);
            _myMC.graphics.beginFill(_Color,_ColorAlpha);
            _myMC.graphics.drawRect(_X,_Y,_W,_H);
            if (_Shadow) {
                _myMC.filters=[new GlowFilter(_ShadowColor,1,5,5,2,2,false,false)];
            }
            _myMC.rotation=_Ro;
            return _myMC;
        }
        //////绘制定义属性的circle.
        private function _drawCircle(_Color:Number=0xDDDDDD,_ColorAlpha:Number=1,_R:uint=5,_X:int=0,_Y:int=0,_Shadow:Boolean=false,_ShadowColor:Number=0x000000,_lineColor:Number=0xFFFFFF,_lineSize:uint=0,_lineAlpha:Number=1):Sprite {
            var _myMC:Sprite=new Sprite();
            _myMC.graphics.lineStyle(_lineSize,_lineColor,_lineAlpha);
            _myMC.graphics.beginFill(_Color,_ColorAlpha);
            _myMC.graphics.drawCircle(_X,_Y,_R);
            if (_Shadow) {
                _myMC.filters=[new GlowFilter(_ShadowColor,1,5,5,2,2)];
            }
            return _myMC;
        }
        ////////////_buildingBG()
        private function _buildingBG():void {
            _bgColor=Math.random()*0xFFFFFF+0x002211;
            _stagebg.graphics.clear();
            _stagebg.graphics.beginFill(_bgColor,.3);
            _stagebg.graphics.drawRect((stageW-stage.stageWidth)/2,(stageH-stage.stageHeight)/2,stage.stageWidth,stage.stageHeight);
        }
        ////////////
        private function _customMenu():void {
            var _customMenu:ContextMenu=new ContextMenu();
            var item0:ContextMenuItem=new ContextMenuItem(menulabel[0]);
            var item1:ContextMenuItem=new ContextMenuItem(menulabel[1]);
            _customMenu.customItems.push(item0,item1);
            this.contextMenu=_customMenu;
        }
        ///bg
        private function _buildingGBG():void {
        }
        /////绘制渐变圆形。
        private function _drawGraCir(_Radiu:uint=135,_Alpha1:Number=0,_Alpha2:Number=.6,_Ratio1:Number=0xBB,_Ratio2:Number=0xFF,_MatrW:uint=500,_MatrH:uint=500,_MatrX:int=-250,_MatrY:int=-400,_Color1:Number=0xFFFFFF,_Color2:Number=0xFFFFFF,_Shadow:Boolean=false):Sprite {
            var _myMC:Sprite=new Sprite();
            var fillType:String = GradientType.RADIAL;
            //var fillType:String = GradientType.LINEAR;
            var colors:Array = [_Color1, _Color2];
            var alphas:Array = [_Alpha1, _Alpha2];
            var ratios:Array = [_Ratio1, _Ratio2];
            var matr:Matrix = new Matrix();
            matr.createGradientBox(_MatrW, _MatrH, 0, _MatrX, _MatrY);
            var spreadMethod:String = SpreadMethod.PAD;
            var interpolationMethod:String=InterpolationMethod.RGB;
            var focalPointRatio:Number=0;
            _myMC.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod,interpolationMethod,focalPointRatio);
            _myMC.graphics.drawCircle(0,0,_Radiu);
            //_myMC.graphics.drawRect(0,0,100,100);
            if (_Shadow) {
                _myMC.filters=[new GlowFilter(_Color2,1,8,8,2,2)];
            }
            return _myMC;
        }
    }
}

附件

view1.JPG (10.83 KB)

2011-6-6 21:46

图一

view2.JPG (15.91 KB)

2011-6-6 21:46

图二

clock_code.rar (13.77 KB)

2011-6-6 21:46, 下载次数: 2

源码文件

作者: mythl   发布时间: 2011-06-06

还真不错~~继续加油!

作者: liweing   发布时间: 2011-06-07