Аналоговые часы используя только AS 3.0 и ООП




Главная > Уроки > Action script 3.0 > Аналоговые часы используя только AS 3.0 и ООП

Аналоговые часы используя только AS 3.0 и ООП

Автор/переводчик статьи: Команда сайта flashmaster.org.ua

Дата: 2013-01-18

Предпросмотр:

Как вы поняли из названия эти аналоговые часы созданы исключительно кодом. Весь код храниться в классе Main, который вы можете глянуть в исходнике, который я прикрепил ниже. Код не сложный думаю разберетесь, к тому же я все его основные части прокомментировал. 

А вод и сам класс 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++)
			{
				//Тут проходит весь расчет в радианах
				//Умножение на радиус sin и cos угла получаем координаты 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;
		}
	}
}

Исходник: скачать.

Источник

Просмотров: 1614


Понравился материал? Поделись с друзьями!





Подписаться на рассылку.

При перепечатки материалов ссылка на наш сайт обязательна!


 1