本帖最后由 刘树义 于 2020-5-30 20:46 编辑
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=600;//stage.stageWidth;//定义一个变量,存放场景的宽度 var clockH:Number=600;//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(clockw , clockh , clockr) {//定义一个主函数 this.clockW=clockw; this.clockH=clockh; this.clockR=clockr;  ic() HMS(); } private function Pic() {//调用库中钟面元件 var picIC=new PIC(); addChild(pic);//添加到场景中 pic.x=clockW/2;//调整位置 pic.y=clockH/2; } //---------------敲钟函数---------- 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);//新建一个影片剪辑,绘制时针 // 半径 针长度 偏移量 左边的高度 右边的高度 指针颜色 var hou:HOU=new HOU(); addChild(hou);//将时针添加到场景中 //----------添加分针-------- //var min: Sprite = new DRAW(2,160,20,2,0.6,0x000000,Scale);//新建一个影片剪辑,绘制分针 var min:MIN=new MIN(); addChild(min); //----------添加钞针-------- var sec: Sprite = new DRAW(5,130,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; } } }
|