actionscript编写的时钟小程序

今天用actionscript3.0编写了一个时钟小程序,现将代码贴在我的博客里,供大家共享。

 

代码如下:

package 
{
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
   
    /**
     * ...
     * @author me
     */
    public class Clock extends Sprite
    {
        private var circle:Sprite;
        private var secondHand:Shape;
        private var minuteHand:Shape;
        private var hourHand:Shape;
        private var circleX:int = 200;
        private var circleY:int = 200;
        private var circleRadium:int = 100;   
        private var secondsOneDay:int = 24 * 60 * 60;
        private var secondsOneHour:int = 60 * 60;
        private var timer:Timer;
       
        public function Clock()
        {
            init();
            drawlabel();
            drawHand();
            showtime(new Date());
            timer = new Timer(1000);
            timer.addEventListener(TimerEvent.TIMER, onRotation);
            timer.start();
        }
       
        private function onRotation(e:TimerEvent):void
        {
            showtime(new Date());
        }
       
        private function showtime(date:Date):void
        {
            var hourrotation:Number = date.getHours();
            var minuterotation:Number = date.getMinutes();
            var secondrotation:Number = date.getSeconds()+1;
            hourHand.rotation = hourrotation * 30  + minuterotation*0.5;
            minuteHand.rotation = minuterotation * 6 + secondrotation*0.1;
            secondHand.rotation = secondrotation * 6;
        }
       
        private function drawHand():void
        {
            hourHand = new Shape();
            hourHand.graphics.lineStyle(3.0, 0x003366);
            hourHand.graphics.moveTo(0, -20);
            hourHand.graphics.lineTo(0, 0);
            hourHand.x = circleX;
            hourHand.y = circleY;
            addChild(hourHand);
            minuteHand = new Shape();
            minuteHand.graphics.lineStyle(2.0, 0x000099);
            minuteHand.graphics.moveTo(0, -50);
            minuteHand.graphics.lineTo(0, 0);
            minuteHand.x = circleX;
            minuteHand.y = circleY;
            addChild(minuteHand);
            secondHand = new Shape();
            secondHand.graphics.lineStyle(0.5, 0xcc0033);
            secondHand.graphics.moveTo(0,-75);
            secondHand.graphics.lineTo(0, 0);
            secondHand.x = circleX;
            secondHand.y = circleY;
            addChild(secondHand);
        }
       
        private function init():void
        {
            circle = new Sprite();
            circle.graphics.beginFill(0xeeeeff)
            circle.graphics.drawCircle(circleX, circleY, circleRadium);
            circle.graphics.endFill();
            addChild(circle);
           
        }
       
        private function drawlabel():void
        {
            for (var i:int = 1; i <= 12; i++)
            {
                var label:TextField = new TextField();
                label.text = i.toString();
                var angel = i * 30 * Math.PI / 180;
                label.x = circleX + (0.9 * Math.sin(angel) * circleRadium) - 5  ;
                label.y = circleY - (0.9 * Math.cos(angel) * circleRadium) - 9  ;
                addChild(label);
            }
        }
       
       
    }
   
}

 

如要观看效果,按下述步骤:

1.将上述代码保存为Clock.as文件;

2.打开Flash CS4;

3.新建一个.fla的文件,保存在与Clock.as同一目录下;

4.在.fla的属性面板有个类属性,文本框中填上Clock,记住,不要加.as后缀

5.点击文本框旁边的笔,显示出代码

6.按Ctrl+Enter键测试即可

 

重点:

在编写的时候,遇到的第一个问题,就是1-12数字如何确立坐标的问题,大家都知道,一个钟面是360度,那么一个数字即为1格所占的角度
便是30度,对于每个数字的横坐标位置即是圆心的x坐标加上图中所标识的X,而纵坐标即是圆心的y坐标减去图中所标识的Y,之所以是减,是因为纵坐标在flash中与数学中是相反的,根据屏幕而定的,现在知道一个块是30度,又知道斜边也就是圆半径的长度,则可通过三角函数推到出x,y的值,从而定位好数字的坐标。

另外一个问题是模拟时钟转动的问题,我写了一个定时器,即Timer,参数是1000,单位是毫秒,即隔1秒即会执行相应的处理函数,这里是onRotation函数,关于时针,分针,秒针的指向问题,因为一秒中一格是6度,则秒针的指向即当前秒数乘以6几位它的角度,而分针则是分数乘以6再加上秒数乘以0.1,0.1的得来是这样的,一分钟有60秒,一分钟是6度,则1秒是0.1度,时针是这样的,一个小时是60分钟,一个小时一格是30度,则1分钟走0.5度,好了,希望我解释的清楚了。呵呵

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值