首先是素材准备,制作时钟,自己设计水平比较好的话,可以自己画一个时钟,如果对自己设计水平不大自信的或者是想省点时间的话就可以到网上搜索素材,自己再稍微加工一下,就可以做个比较满意的作品了,可以用PS也可以用FW,我用的是Firework CS4+Flash CS5 ,从网上http://www.zcool.com.cn/gfx/ZMTIwNDQ0.html下载素材,然后自己稍微处理一下。
素材分层,因为里面是jpg格式的文件,只有一层,所以我们需要用FW把素材单独分层,方便调用。素材准备好之后,插入——新建元件——影片剪辑,分别是底图,时针,分针,秒针。实例名字分别是Mc_ditu,Mc_shizhen,Mc_fenzhen,Mc_miaozhen。
底图相对舞台水平垂直对齐,时针,分针,秒针都对准12刻度,现在我们来理一下思路:我们先想想,这个时钟是圆的(这是废话-O(∩_∩)O哈哈~),然后时针、分针、秒针都指在12点方向。
猜想一下,对于时针,假如1点呢?是不是要顺时针旋转1小时*30°;假如1点半呢?是不是1+30/60=1小时*30°+30/60*30°=1小时*30+1/2*分钟(°);假如1点30分30秒呢?是不是1*30+30/60*30+30/(60*60)*30(°),你会发现秒对小时的影响太小了,可以忽略不算。
对于分针,360°/ 60=6°,也就是说1分钟旋转6°,可是1分钟30秒呢,同样的是1+30/60=1分钟*6+30/60*6(°)=1分钟*6+1/10*秒(°)。
对于秒针,很显然1秒6°。
以此类推出要旋转的角度就是:小时,h*30+1/2m(°),分钟,m*6+1/10s(°),分钟,s*6(°)。
在第一帧写AS代码如下:
import flash.utils.Timer;
import flash.events.Event;
import flash.events.TimerEvent;
var listen:Timer=new Timer(1000);//定义listen时钟类实例,延时1000ms(1s),不定义重复次数,不断地计时
function shizhong(eve:Event):void //定义shizhong函数,并使用监听功能,返回只能为空,eve这是监听参数属于事件类
{
var now:Date=new Date();//定义now日期的实例,时间如果是大于12小时的需要用到
var h=now.hours;//定义h等于现在的小时
var m=now.minutes;//定义m等于现在的分钟
var s=now.seconds;//定义s等于现在的分钟
if (h>12)
{
h=h-12; //因为我们的时针只有12小时,而不是24小时
}
Mc_shizhen.rotation=h*30+1/2*m;
Mc_fenzhen.rotation=m*6+1/10*s;
Mc_miaozhen.rotation=s*6;
}
listen.addEventListener(TimerEvent.TIMER,shizhong);//添加时间事件监听事件,对函数shizhong进行监听
listen.start();//添加了监听别忘了要开始启动计时器
时钟制作完毕,可是我要是看起来效果不好,可以用一下AS3.0的滤镜以及过渡效果,我这里就用了投影的效果,所有代码如下:
import flash.utils.Timer;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.filters.DropShadowFilter;
var listen:Timer=new Timer(1000);//定义listen时钟类实例,延时1000ms(1s),不定义重复次数,不断地计时
function shizhong(eve:Event):void //定义shizhong函数,并使用监听功能,返回只能为空,eve这是监听参数属于事件类
{
var now:Date=new Date();//定义now日期的实例,时间如果是大于12小时的需要用到
var h=now.hours;//定义h等于现在的小时
var m=now.minutes;//定义m等于现在的分钟
var s=now.seconds;//定义s等于现在的分钟
if (h>12)
{
h=h-12; //因为我们的时针只有12小时,而不是24小时
}
Mc_shizhen.rotation=h*30+1/2*m;
Mc_fenzhen.rotation=m*6+1/10*s;
Mc_miaozhen.rotation=s*6;
}
listen.addEventListener(TimerEvent.TIMER,shizhong);//添加时间事件监听事件,对函数shizhong进行监听
listen.start();//添加了监听别忘了要开始启动计时器
var touying:DropShadowFilter=new DropShadowFilter();//创建投影实例,默认阴影距离参数是4,可以修改成你想的参数
Mc_shizhen.filters=[touying];//对象Mc_shizhen应用投影滤镜
Mc_fenzhen.filters=[touying];//对象Mc_fenzhen应用投影滤镜
Mc_miaozhen.filters=[touying];//对象Mc_miaozhen应用投影滤镜