actionscript编写的时钟小程序
2009-09-01 14:38
302 查看
今天用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度,好了,希望我解释的清楚了。呵呵
代码如下:
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度,好了,希望我解释的清楚了。呵呵
相关文章推荐
- 编写时钟 Applet 程序
- 用java编写的时钟程序
- 汇编语言编写时钟程序
- 编写程序显示一个时钟
- C51-------时钟程序(C语言编写的单片机时钟)
- 系统时钟总结和带中断函数的程序的编写步骤
- C语言编写时钟程序
- 黑马程序员JAVA编写的 时钟 程序
- 编写时钟程序
- 2440时钟设置浅谈(带程序)
- 使用MFC编写internet查询程序
- 编写简单的Python程序来判断文本的语种
- struts2编写自定义的验证程序
- 用Python编写一个国际象棋AI程序
- 解决C++编写程序报错:类重定义
- unix下编写socket程序的一般步骤
- 编写程序,求出并输出1000以内的所有的素数
- 将Python代码嵌入C++程序进行编写的实例
- 编写一个程序,读入个数不确定的(<=100个)考试分数,并且判断有多少个分数是大于或等于平均分,多少个分数是低于平均分的。输入一个负数表示输入的结束。假设成绩的最高分为10分。
- 用C语言编写程序,求公元1000年到公元2000年之间的闰年