Flash часы (полностью кодом)

Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player

Класс Main

package 
{
	import flash.events.*;
	import flash.utils.Timer;
	import flash.display.*;
	import flash.text.*;
 
	public class Main extends MovieClip
	{
		private var clock:MovieClip=new MovieClip();
		private var secound:MovieClip = new MovieClip();
		private var minutes:MovieClip = new MovieClip();
		private var hours:MovieClip = new MovieClip();
		private var angle:Number = -90 * Math.PI / 180;
		private var radius:Number = 130;
		private var XtoCircle:Number = 0;
		private var YtoCircle:Number = 0;
		public function Main()
		{
			stage.addEventListener(Event.ENTER_FRAME, onFrame);
			addChild(clock);
			//фон часов
			var shape:Shape = new Shape();
			shape.graphics.beginFill(0x111111,1);
			shape.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,200);
 
			shape.graphics.beginFill(0xFFFFFF,1);
			shape.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,180);
 
			shape.graphics.beginFill(0x111111,0.99);
			shape.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,178);
 
			shape.graphics.beginFill(0xFF2244,1);
			shape.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,150);
			shape.graphics.endFill();
 
			shape.graphics.beginFill(0x111111,0.9);
			shape.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,110);
			shape.graphics.endFill();
 
			shape.graphics.beginFill(0xFFFFFF,1);
			shape.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,5);
			shape.graphics.endFill();
 
			clock.addChild(shape);
 
 
			// Рисуем время
			for (var i:int=1; i<61; i++)
			{
				//Рассчитываем угол в радианах
				//Домножением на радиус синуса и косинуса угла получаем координаты X b Y относительно начала координат
				angle +=  6 * Math.PI / 180;
				XtoCircle = radius * Math.cos(angle);
				YtoCircle = radius * Math.sin(angle);
 
 
				//Каждый пятый рисуем цифру обозначающую час иначе разделитель
				if((i)%5==0)
				{
					//Часы
					var t:TextField = new TextField();
					t.text = String(i/5);
					t.autoSize = TextFieldAutoSize.LEFT;
 
					t.selectable = false;
					t.setTextFormat(new TextFormat(null,20,null,true));
					t.x = XtoCircle + stage.stageWidth / 2 - t.width / 2;
					t.y = YtoCircle + stage.stageHeight / 2 - t.height / 2;
					clock.addChild(t);
				}else{
					//Разделители
					var point:MovieClip = new MovieClip();
					point.graphics.beginFill(0x222222,1);
					point.graphics.drawCircle(stage.stageWidth/2+XtoCircle,stage.stageHeight/2+YtoCircle,2);
					point.graphics.endFill();
 
					clock.addChild(point);
				}
 
			}
 
 
			//Стрелка секундная
 
			var vect1:Shape = new Shape();
			vect1.graphics.lineStyle(1, 0xFFFFFF, 1, false, LineScaleMode.VERTICAL, CapsStyle.ROUND, JointStyle.MITER, 1);
			vect1.graphics.moveTo(0,0);
			vect1.graphics.lineTo(0,150);
			vect1.rotation = 180;
			vect1.y +=  25;
			secound.addChild(vect1);
			clock.addChild(secound);
			secound.x = stage.stageWidth / 2;
			secound.y = stage.stageHeight / 2;
 
 
			//Стрелка минутная
			var vect2:Shape = new Shape();
			vect2.graphics.lineStyle(2, 0xFFFFFF, 1, false, LineScaleMode.VERTICAL, CapsStyle.ROUND, JointStyle.MITER, 1);
			vect2.graphics.moveTo(0,0);
			vect2.graphics.lineTo(0,120);
			vect2.rotation = 180;
			vect2.y +=  20;
			minutes.addChild(vect2);
			clock.addChild(minutes);
			minutes.x = stage.stageWidth / 2;
			minutes.y = stage.stageHeight / 2;
 
			//Стрелка часовая
			var vect3:Shape = new Shape();
			vect3.graphics.lineStyle(3, 0xFFFFFF, 1, false, LineScaleMode.VERTICAL, CapsStyle.ROUND);
			vect3.graphics.moveTo(0,0);
			vect3.graphics.lineTo(0,80);
			vect3.rotation = 180;
			vect3.y +=  15;
			hours.addChild(vect3);
			clock.addChild(hours);
			hours.x = stage.stageWidth / 2;
			hours.y = stage.stageHeight / 2;
 
		}
		//Поворачиваем стрелки с каждым кадром для большей точности
		private function onFrame(e:Event)
		{
			secound.rotation = (new Date()).seconds * 6;
			minutes.rotation = (new Date()).minutes * 6;
			hours.rotation   = (new Date()).hours * 30 + (new Date()).minutes/2;
		}
	}
}
Исходник: 

Впервые!

Если у вас было хоть раз желание сделать что-то новое и необычное, то этот видеокурс для вас! Знания ActionScript 3.0 вдохнут в ваши проекты новую жизнь, позволив тем самым поднять их на новый уровень

С помощью этого видеокурса вы пройдёте путь от новичка до Объектно-Ориентированного Программирования, сможете работать со многими популярными библиотеками и научитесь создавать сайты во flash! + Видеокурс по PaperVision3D в подарок!

Видеокурс содержит 119 видеоуроков в 12 главах. На сегодняшний день это единственный видеокурс, таких масштабов

Узнайте о других возможностях ActionScript 3.0

Комментарии

Аватар пользователя Прохор

Это часы написанные на ActionScript 3.0. Нет ничего нарисованного, все делается кодом.

Аватар пользователя samana

Возможно такая и была задумка, но минутная стрелка скачет по минутам, а не плавно идет, например как часовая.
А вообще, хорошо! Только не понял зачем стрелки (shape) добавлять в мувиклипы...

Аватар пользователя Прохор

Можно было и без этого обойтись, зато так координаты обнулили и поворот, и кстати точка относительно которой меняется угол изменилась тоже. т.к. если раньше стрелка просто бы крутилась вокруг крайней точки, то теперь одна ее часть немного уходит назад. (vect1.y += 25;)
А еще мне кажется так логически правильнее, есть контейнер, который хранит исходное изображение со всеми настройками, который можно просто перемещать и всячески им манипулировать.

Аватар пользователя PROgR

Замечательно!*respekt*