|
超级版主
  
- UID
- 4497
- 帖子
- 235
- 精华
- 0
- 积分
- 1001
- 金币
- 604 枚
- 魅力
- 269 点
- 威望
- 10 点
- 阅读权限
- 9
- 在线时间
- 37 小时
- 注册时间
- 2006-12-11
- 最后登录
- 2008-7-4
|
【楼主】
大 中
小 发表于 2007-3-3 19:34 只看该作者
钟表教材
http://bbs.cnlsj.com/dispbbs.asp?boardID=303&ID=45409&page=1
点击浏览该FLASH文件:
点击浏览该FLASH文件:
钟表语句:
d = new Date();
miaozhen._rotation=d.getSeconds()*6+d.getMilliseconds()/160;
fenzhen._rotation = d.getMinutes()*6+d.getSeconds()/10;
shizhen._rotation = d.getHours()*30+d.getMinutes()/2;
time = new Date();
hour = time.getHours();
minute = time.getMinutes();
second = time.getSeconds();
if (minute<10) {
minute = "0"+minute;
}
if (second<10) {
second = "0"+second;
}
timetext = hour+":"+minute+":"+second;
_root.onLoad = function () {
weekArray = new Array("星期曰", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
monthArray = new Array("1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月");
timedate = new Date();
};
_root.onEnterFrame = function () {
year = timedate.getFullYear();
monthnum = timedate.getMonth();
month = monthArray[monthnum];
week = timedate.getDay();
weekday = weekArray[week];
dweek.text = weekday;
day = timedate.getDate();
hour = timedate.getHours();
minute = timedate.getMinutes();
second = timedate.getSeconds();
dday.text = year+"年"+month+""+day+"曰";
delete timedate;
timedate = new Date();
};
在 action 图层第 2 祯插入关键祯,动作面板中输入:
gotoAndPlay(1);
点击浏览该FLASH文件:
本实例制作一款有时针、分针、秒针,且带有曰期、星期和数字
时间显示的模拟时钟。本例将用到一些关于时间的语法函数,如
getFullYear、getMonth、getDay、getDate、getHours、getMinutes、
getSeconds 等,以及_rotation 属性和数组 Array。现在我们就一起完
成这个实例。
启动 Flash MX 2004 软件,建立文档,并以“时钟”名字保存。
一、制作钟盘
1、 设置场景,宽、
高尺寸为 350 px×
350px,蓝色,其他
默认,如图 1:
图 1
执行“插入--新建元件”命令,如图 2 进行设置:
图 2
2、 选中图层 1 的第 1 祯,用椭圆工具,画一个 260×260 无边
框填充色为
放射状正
圆,,色彩随
意, 参考色值
设置如图 3:
260 × 260
图 3
4、用填充变形工具
将图形调成图 4 状:
图 4
5、 用直线工具画一条宽12高为0的线段,
选择对齐面板中的水平中齐、 垂直居中
对齐,然后再利用键盘上的方向键,将
此线段平移至表盘的左边缘, 如图 5 所
示:
图 5
6、用任意变形工具选中线段,将中心点(中间的圆点)移至表盘
中心处的“十字,打开窗口中的变形面板,旋转 30 度,复制 12
次该线段,如图 6:
图 6
7、再用直线工具画一条宽约是上面线段二分之一的线段,同步骤 5
的方法, 将
其置于表
盘左侧, 打
开窗口中
的变形面
板, 旋转 6
度,复制 60 次,如图 7 所示: 图 7
8、选择文本工具
,做如图 8 所示的设置:按照表盘上的排序,输
入数字 1-12,然后分别点中每一个数字,调整位置,到满意时止,然
后,点中第 1 祯,使表盘、刻度和数字都处于被选中状态,执行“修
改→组合”命令,如图 8:
图 8
9、用椭圆工具画一无笔触色、填充色为线性(色值如图 9 所示)、
宽高为 275×275 的正圆,并用填充变形工具调整角度后,居中对齐。
图 9
10、在选中状态下,执行“修改→
组合”命令,再执行“修改→排列→移
至底层”命令,效果如图 10 所示:
图 10
11、用椭圆工具,再画一个无笔触色,填充色为线性、宽、高为
315×315 的正圆,色值如图 11 所示,并用填充变形工具调整填充色
的宽度和角度:
图
12、用对齐面板将其全居中,执行
“修改→组合”命令,再执行“修改→
排列→移至底层”命令,完成后的效果
如图 12 所示:
图 12
二、制作影片剪辑指针元件
13、分别执行“插入→新建元件”
命令,创建时针、分针和秒针三个影片
剪辑元件,指针形状可根据自己的喜好
绘制。但要注意:要将指针的底部偏上
一点的地方和舞台中的十字对齐,如图
13 所示: 图 13
14、制作秒针的阴影。在秒针元件编辑区,插入一个新图层,右
键图层 1 的第 1 祯,选择复制祯,再点中图层 2 的第 1 祯,右键选择
粘贴祯,并颠倒两个图层的位置,下面图层为秒针的阴影,将阴影改
为灰色,并转换为图形元件;在秒针图层的 720 祯插入祯,在阴影图
层的第 1 祯,用键盘上的方向键将阴影元件向右移动 3 个像素,分别
在阴影图层的 180 祯、360 祯、540 祯和 720 祯加关键祯,180 祯处
继续向右移动 2 个像素,360 祯处,先用对齐面板水平中齐,再向左
移动 3 个像素,540 祯继续向左移动 2 个像素,720 祯不要在动(和
第 1 祯位置相同),点中阴影图层,使该图层上的所有祯都处于被选
中状态,在属性面板里创建补间动画。
注:由于该实例的祯频为 12fps,即每秒播放 12 祯,秒针旋转
一周为 60 秒,共计 720 祯,在每个关键祯处改变阴影的位置,就会
产生随着秒针的旋转,阴影的位置也会发生不同的变化的效果。
三、组装时钟元件
15、执行“插入→新建元件”命令,创建时钟影片剪辑元件,如
图 14:
图 14
16、添加六个图层,由下至上分别更名为:钟盘、文本、时针、
分针、秒针、圆心和 action。在选中钟盘图层第 1 祯,从库中拖出制
作完整的表盘图形元件,居中对齐;在圆心图层第 1 祯,选择椭圆工
具,画一个无边框、填充色为一放射状的圆点,置于表盘正中间。除
时针图层外,其他图层加锁,如图 15:
图 15
17、选中“时针”图层,从库中拖出时针元件,在属性面板中将
实例名改为 “shizhen”; 用任意变形工具选中时针元件, 将注册点 (中
间白色的圆点)移至时针元件的十字并与表盘上的中心点重叠,锁定
该图层,如图 16:
图 16
18、锁定时针图层并关闭时针图层的眼睛(便于编辑分针元件)。
选中分针图层第一祯,从库中拖出分针元件,点中分针元件,在属性
面板里将实例名改为“fenzhen”,用任意变形工具,将分针元件的十
字与钟盘上的中心点重叠, 再用任意变形工具,将注册点移到十字
上,锁定该图层,如图 17:
图 17
19、关闭分针图层的眼睛(便于编辑秒针元件)。选中秒针图层
第 1 祯,从库中拖出秒针元件,点中秒针元件,在属性面板里将实例
名改为“miaozhen”,将秒针元件的十字与表盘上的中心点重叠, 再
用任意变形工具, 将注册点移到十字上,锁定该图层,如图 18:
图 18
四、制作动态文本框
20、解开文本图层的锁,锁定其他图层。
点中该图层的第 1 祯,用文本工具拉出三个动态文本框,并分别
输入相应的变量名和实例名,参数设置如图 19 所示:
图 19
五、输入动作脚本
21、将 action 图层的锁解开。选中第 1 祯,打开动作面板,输入如下
语句:
d = new Date();
miaozhen._rotation=d.getSeconds()*6+d.getMilliseconds()/160;
fenzhen._rotation = d.getMinutes()*6+d.getSeconds()/10;
shizhen._rotation = d.getHours()*30+d.getMinutes()/2;
time = new Date();
hour = time.getHours();
minute = time.getMinutes();
second = time.getSeconds();
if (minute<10) {
minute = "0"+minute;
}
if (second<10) {
second = "0"+second;
}
timetext = hour+":"+minute+":"+second;
_root.onLoad = function () {
weekArray = new Array("星期曰", "星期一", "星期二", "星期
三", "星期四", "星期五", "星期六");
monthArray = new Array("1 月", "2 月", "3 月", "4 月", "5 月
", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月");
timedate = new Date();
};
_root.onEnterFrame = function () {
year = timedate.getFullYear();
monthnum = timedate.getMonth();
month = monthArray[monthnum];
week = timedate.getDay();
weekday = weekArray[week];
dweek.text = weekday;
day = timedate.getDate();
hour = timedate.getHours();
minute = timedate.getMinutes();
second = timedate.getSeconds();
dday.text = year+"年"+month+""+day+"曰";
delete timedate;
timedate = new Date();
};
在 action 图层第 2 祯插入关键祯,动作面板中输入:
gotoAndPlay(1);
22、回到主场景,在图层 1 的第 1 祯,从库中将制作好的时钟影
片剪辑元件拖出。
OK!测试存盘。
时钟的语句
为了大家制作时方便,把action图层的动作语句附于此:
第一祯:
d = new Date();
_root.sec_mc._rotation = d.getSeconds() * 6 + d.getMilliseconds() / 160;
_root.min_mc._rotation = d.getMinutes() * 6 + d.getSeconds() / 10;
_root.hour_mc._rotation = d.getHours() * 30 + d.getMinutes() / 2;
第二祯:
gotoAndPlay(1);
关于曰期的语句:
第一祯:
time = new Date();y = time.getYear();
moon = time.getMonth();today = time.getDay();
day = time.getDate();year = y + 1900;
moon = moon + 1;if (today == 1){ sun = "";
today = "一";} // end if
if (today == 2){sun = "";today = "二";} // end if
if (today == 3){sun = "";today = "三";} // end if
if (today == 4){sun = "";today = "四";} // end if
if (today == 5){sun = "";today = "五";} // end if
if (today == 6){ sun = "";today = "六";} // end if
if (today == 0){sun = "曰";today = "";
}
第二祯:gotoAndPlay(1);
报时时钟的语句:
function ClockFun() {
// 声明一个名为时间对象
time = new Date();
// 时针每小时旋转30度
hour = time.getHours()*30;
// 分针,每分钟旋转6度
minute = time.getMinutes()*6;
//秒针,每秒钟旋转6度
second = time.getSeconds()*6;
// 每过10秒分针度数加1,增加真实性
minute += time.getSeconds()/10;
// 每过2分钟,时针度数加1
hour += time.getMinutes()/2;
// _rotation是影片的角度属性,用来控制影片实例旋转
秒针._rotation = second;
分针._rotation = minute;
时针._rotation = hour;
// 把系统当前月数值赋给变量months
months = (time.getMonth()+1);
// 如果月数值是个位数,在其前面显示一个零
if (length(months) == 1) {
m+months;
}
// 把系统当前曰数值赋给变量dates
dates = time.getDate();
// 如果曰数值是个位数,在其前面显示一个零
if (length(dates) == 1) {
dates = "0"+dates;
}
// 在“曰期”文本框内显示系统曰期
曰期 = time.getFullYear()+"."+months+"."+dates;
// 定义一个数组
days = new Array('星期曰', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六');
// 把系统的星期值赋给变量day(如星期五时,day的值就是5)
day = time.getDay();
// 在“星期”文本框内显示系统星期
星期 = days[day];
// 将系统当前小时的值赋给变量hours
hours = time.getHours();
minutes = time.getMinutes();
seconds = time.getSeconds();
// 到零点时,显示两个0
hours = (time.getHours() == 0) ? "0"+hours : time.getHours();
// 如果分钟的值为个位数,就在前面多显示一个零
minutes = (length(minutes) == 1) ? "0"+time.getMinutes() : time.getMinutes();
// 如果秒种值是一位数,就在前面多显示一个零
seconds = (length(seconds) == 1) ? "0"+seconds : time.getSeconds();
// 显示时间
时间 = hours+":"+minutes+":"+seconds;
// 声明一个声音对象
gugu = new Sound();
// 把报时声附加到新对象中
gugu.attachSound("报时声");
if (seconds == 0 && minutes == 0) {
gugu.start();
}
// 每隔10秒钟闹铃一次
if ((时钟 == time.getHours()) && (分钟 == time.getMinutes()) && (time.getSeconds()%10 == 0)) {
gugu.start();
}
}
// 每隔1000毫秒执行一次ClockFun函数
setInterval(ClockFun, 1000);
|