Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 27.10.2010, 23:25
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 1  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
По умолчанию Аналоговые часы на as3 - вопрос по реализации!

Приветиус!

Сделал часы, но до конца недоработал, меня уже давно терзают сомнения по поводу правильности реализации!

Это одно из моих первых "произведений", поэтому выглядит довольно странно.

Контейнеры создаются для того, чтобы "сместить точку регистрации" для более правильного вращения.

Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import mx.core.BitmapAsset;
 
 
 
	public class KanjiClock extends Sprite {
 
		[Embed(source = "kanji_clock.jpg")] //подключаем jpg
		var ClockDial:Class;
 
		private var secHand:Sprite;
		private var minHand:Sprite;
		private var hourHand:Sprite;
 
		private var secContainer:Sprite;
		private var minContainer:Sprite;
		private var hourContainer:Sprite;
 
 
		public function KanjiClock ():void {
 
			var dial:BitmapAsset = new ClockDial(); //объявляем переменную от Embed source
			stage.addChild (dial);	//добавляем циферблат (jpg) на сцену
 
			var centerCircle:Sprite = new Sprite(); //центральный кружок
			centerCircle.graphics.beginFill (0x000000);
			centerCircle.graphics.drawCircle (148, 148, 7);
			centerCircle.graphics.endFill();
 
			secContainer =  new Sprite(); //контейнер для секундной стрелки
			secContainer.x = 148;
			secContainer.y = 148;
			secContainer.rotation = 180;
 
			minContainer =  new Sprite(); //контейнер для минутной стрелки
			minContainer.x = 148;
			minContainer.y = 148;
			minContainer.rotation = 180;
 
			hourContainer =  new Sprite(); //контейнер для часовой стрелки
			hourContainer.x = 148;
			hourContainer.y = 148;
			hourContainer.rotation = 180;
 
			secHand = new Sprite(); //секундная стрелка
			secHand.graphics.lineStyle (.1, 0x000000);
			secHand.graphics.beginFill (0x0066CC);
			secHand.graphics.drawRect (0, 0, 4, 100);
			secHand.graphics.endFill();
			secHand.x = - 2;
			secHand.y = 0;
 
			minHand = new Sprite(); //минутная стрелка
			minHand.graphics.lineStyle (.1, 0x000000);
			minHand.graphics.beginFill (0x650099);
			minHand.graphics.drawRect (0, 0, 6, 80);
			minHand.graphics.endFill();
			minHand.x = - 3;
			minHand.y = 0;
 
			hourHand = new Sprite(); //часовая стрелка
			hourHand.graphics.lineStyle (.1, 0x000000);
			hourHand.graphics.beginFill (0x660000);
			hourHand.graphics.drawRect (0, 0, 8, 60);
			hourHand.graphics.endFill();
			hourHand.x = - 4;
			hourHand.y = 0;
 
			//добавляем стрелки в их контейнеры
			secContainer.addChild (secHand);
			minContainer.addChild (minHand);
			hourContainer.addChild (hourHand);
 
			//добавляем на stage контейнеры со стрелками и кружок в центр
			stage.addChild (hourContainer);
			stage.addChild (minContainer);
			stage.addChild (secContainer);
			stage.addChild (centerCircle);
 
			stage.addEventListener (Event.ENTER_FRAME, onEnterFrame, false, 0, true);
 
 
			function onEnterFrame (e:Event):void {
 
				var currentDate:Date = new Date();
				var sec:Number = currentDate.getUTCSeconds();
				var min:Number = currentDate.getUTCMinutes();
				var hour:Number = currentDate.getUTCHours();
 
				//добавляем вращение контейнерам
				secContainer.rotation = 180+6*sec;
				minContainer.rotation = 180+6*min + sec*0.1;
				hourContainer.rotation = 180+30*(hour+4) + min/2;
			}
 
		}
 
	}
 
}
Насколько это безграмотно?

Нужен ли здесь метатег Embed или можно было обойтись простым loader'ом?

Да и вообще буду рад любому мнению!
Вложения
Тип файла: swf KnjClk.swf (79.2 Кб, 122 просмотров)

Создать новую тему   Часовой пояс GMT +4, время: 10:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.