本帖最后由 刘树义 于 2020-5-5 14:26 编辑
package {
import flash.display.Sprite;//加载外部类
public class DRAW extends Sprite {//定义一个类
var color:uint=0x000000;//笔触颜色和填充颜色,如果不同则要定义二个颜色变量
var Offset:Number =15;//左偏移量
var cr:Number =3;//圆的半径
var long:Number =120;//钟指针的长度
var high2:Number =1;//右边高度
var high1:Number =3;//左边高度
var Scale:Number=0;// 缩放比例
public function DRAW(cr,long,Offset,high1, high2,color,Scale) {//定义一个主函数
// 半径 针长度 偏移量 左边的高度 右边的高度 指针颜色 缩放比例
this.Scale=Scale;
this.cr=Scale*cr;//用调用的数据重刷新一个变量里的值
this.long=Scale*long;
this.Offset=Scale*Offset;
this.high1=Scale*high1;
this.high2=Scale*high2;
this.color=color;
Draw();
}
private function Draw() {
var hou:Sprite =new Sprite();//构建一个影片剪辑
hou.graphics.lineStyle(1,color);//设置画线样式
hou.graphics.beginFill(color);//填充颜色
hou.graphics.drawCircle(-Offset,0,cr);//在(-15,0)点上绘制一个半径为3的圆
hou.graphics.endFill();//结束填充
hou.graphics.beginFill(color);//填充颜色
hou.graphics.moveTo(-Offset,-high1);//把当前的笔头移动到(-15,-3)点
hou.graphics.lineTo(long,-high2);//从点(-15,-3)到点(120,-1)画一条线
hou.graphics.lineTo(long,high2);//从点(120,-1)到点(120,1)画一条线
hou.graphics.lineTo(-Offset,high1);//从点(120,1)到点(-15,3)画一条线
hou.graphics.lineTo(-Offset,-high1);//从点(-15,3)到点(-15,-3)画一条线
hou.graphics.endFill();//结束填充
addChild(hou);//把新建的影片剪辑添加到场景中
//hou.x=hou.y=200;//移动到场景的中心点
}
}
}
===================================================================
package {
import flash.display.Sprite;//加载外部类,用于影片剪辑
import flash.events.Event;//加载外部类,用于侦听
import flash.media.Sound;//加载外部类,用于声音
import flash.media.SoundChannel;//加载外部类,用于声道
import flash.events.TimerEvent;//加载外部类,用于时间侦听
import flash.utils.Timer;//加载外部类,用于时间
public class BigBen extends Sprite {//定义一个类
var clockW:Number=stage.stageWidth;//定义一个变量,存放场景的宽度
var clockH:Number=stage.stageHeight;//定义一个变量,存放场景的高度
var clockR:Number=clockW>clockH?clockH:clockW;//定义一个变量,存放时钟半径
var Scale:Number=clockR/400;//定义一个变量,存放缩放比例
var myTimeate=new Date();//定义一个变量,存放时间日期
var bells:int =0;//定义一个变量,做是否在敲钟的标记。也可以用布尔类型
var numHours:int=0;//定义一个变量,存放当时为几点钟
var sound:Sound =new BELL();//加载库中声音
var sound1:Sound =new BEFORE();//加载库中声音
var soundchannel:SoundChannel;//定义一个变量,用于声道
var M:Number =0;//调用启动声音的时间
public function BigBen() {//定义一个主函数
//-----------绘制参考线--------
var pic:Sprite =new Sprite();
pic.graphics.lineStyle(1,0xff0000);
pic.graphics.drawCircle(clockW/2,clockH/2,clockR/2*0.95);
pic.graphics.moveTo(0,clockH/2);
pic.graphics.lineTo(clockW,clockH/2);
pic.graphics.moveTo(clockW/2,0);
pic.graphics.lineTo(clockW/2,clockH);
addChild(pic);
HMS();
}
//---------------敲钟函数----------
private function Bells() {
var j:int =0;//定义一个变量,存放敲钟几次了
myTime=new Date();//获取最新时间日期
numHours=myTime.getHours()+1;//调整一下数据
var numbells:int =numHours%12;//将24点计时转为12点计时
if (numbells==0) {//0点敲钟12次
numbells=12;
}
var timer:Timer=new Timer(3000,numbells);//定义敲钟时间间隔和次数
timer.addEventListener(TimerEvent.TIMER,TimerOverEvent);//添加侦听函数
timer.start();//计时开始
function TimerOverEvent(e:TimerEvent) {//侦听函数
j++;//敲钟一次加一个数
if (j<=numbells) {
soundchannel=sound.play();//没有到应敲钟次数继续敲钟
}
if (j==numbells) {
bells=0;//超过了应敲钟次数,将bells标记置为不在敲钟
}
}
}
//-----------------敲钟前的声音函数----------
private function before() {
var timer:Timer=new Timer(19000,1);//构建一个时间间隔变量
timer.addEventListener(TimerEvent.TIMER_COMPLETE,TimerOverEvent);//对timer添加一个侦听事件
timer.start();//启动timer
function TimerOverEvent(e:TimerEvent) {
soundchannel=sound1.play();//播放敲钟前的声音
}
}
public function HMS() {
//----------添加时针--------
var hou:Sprite=new DRAW(3,120,7,3,1,0x000000,Scale);//新建一个影片剪辑,绘制时针
// 半径 针长度 偏移量 左边的高度 右边的高度 指针颜色
addChild(hou);//将时针添加到场景中
//----------添加分针--------
var min: Sprite = new DRAW(2,160,20,2,0.6,0x000000,Scale);//新建一个影片剪辑,绘制分针
addChild(min);
//----------添加钞针--------
var sec: Sprite = new DRAW(5,180,35,0.5,0.5,0xff0000,Scale);///新建一个影片剪辑,绘制秒针
addChild(sec);
hou.x=min.x=sec.x=clockW/2;//调整时、分、钞针的位置
hou.y=min.y=sec.y=clockH/2;
//------为时、分、秒针添加侦听事件------
sec.addEventListener(Event.ENTER_FRAME,showSec);
min.addEventListener(Event.ENTER_FRAME,showMin);
hou.addEventListener(Event.ENTER_FRAME,showHou);
}
private function showSec(e:Event) {
myTime=new Date();
e.target.rotation = myTime.getSeconds() * 6 + myTime.getMilliseconds() / 1000 * 6 - 90;
if (Math.round(e.target.rotation)==-108 && bells==0 && -90>M && M>-95) {
Bells();//调用Bells敲钟函数
bells=1;//设置当前已在敲钟
}
if (Math.round(e.target.rotation)==60 && -90>M && M>-95) {
before();//调用敲钟前的声音
}
}
private function showMin(e:Event) {
e.target.rotation = myTime.getMinutes() * 6 + myTime.getSeconds() / 10 -90 ;
M=e.target.rotation;//获取当前分针的位置
}
private function showHou(e:Event) {
e.target.rotation = myTime.getHours() * 30 + myTime.getMinutes() *5 / 10-90;
}
}
}
|