Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Аналоговые часы на as3 - вопрос по реализации! (http://www.flasher.ru/forum/showthread.php?t=146059)

tsarapkabel 29.10.2010 05:05

Всё понятно, но такой вариант породил одну проблемку:


Если я делаю так
Код AS3:

addChild (dial);        //добавляем циферблат (jpg) на сцену
 
addChild (hourHand);
addChild (minHand);
addChild (secHand);
 
x = y = 148;

то x = y = 148 срабатывает и для dial, который должен стоять в нуле. :(


Если пихнуть его на stage
Код AS3:

stage.addChild(dial);        //добавляем циферблат (jpg) на сцену
 
addChild (hourHand);
addChild (minHand);
addChild (secHand);
 
x = y = 148;

то всё добавляется правильно, но стрелок я не вижу за dial'ом. :(


Пока вариант решения такой
Код AS3:

stage.addChild (dial);        //добавляем циферблат (jpg) на сцену
 
secHand.x = secHand.y = 148;
minHand.x = minHand.y = 148;
hourHand.x = hourHand.y = 148;
 
stage.addChild (hourHand);
stage.addChild (minHand);
stage.addChild (secHand);

однако приходится шесть раз присваивать одно и тоже значение и класть всё на stage.


Может есть более разумный вариант как разместить стрелки по центру, а dial в нуле?

КорДум 29.10.2010 08:31

Почему именно на stage?

tsarapkabel 29.10.2010 21:25

В принципе неважно куда. Главное чтобы стрелки были в центре, а циферблат в нуле.

deamoK 30.10.2010 00:46

Цитата:

Сообщение от tsarapkabel (Сообщение 946467)
В принципе неважно куда. Главное чтобы стрелки были в центре, а циферблат в нуле.

Помоему удобно использовать ноль как центр...

Код AS1/AS2:

package  
{
        import flash.display.Bitmap;
        import flash.display.Shape;
        import flash.display.Sprite;
        import flash.events.TimerEvent;
        import flash.utils.Timer;
 
        public class SimpleClock extends Sprite
        {
                private var minHand:Shape;
                private var secHand:Shape
                private var timer:Timer;
                private var date:Date;
                private var border:Bitmap;
                private var hourHand:Shape;
 
                private var sec:int;
                private var min:int;
                private var hour:int;
 
                [Embed(source="D:/Pictures/trad.png")]
                private var borderClass:Class
 
                public function SimpleClock()
                {
                        secHand = new Shape();
                        minHand = new Shape();
                        hourHand = new Shape()
                        border = new borderClass();
                        timer = new Timer(1000);
 
                        border.x = -border.width / 2;
                        border.y = -border.height / 2
 
                        secHand.graphics.beginFill(0xFF0000);
                        secHand.graphics.drawRect( -1, -50, 2, 70);
                        secHand.graphics.beginFill(0xFF0000);
                        secHand.graphics.drawCircle(0, 0, 5)
 
                        minHand.graphics.beginFill(0);
                        minHand.graphics.drawRect(-2, -40, 4, 40);
 
                        hourHand.graphics.beginFill(0xCCCCCC)
                        hourHand.graphics.drawRect(-2, -30, 4, 30)
 
                        addChild(border);
                        addChild(hourHand);
                        addChild(minHand);
                        addChild(secHand);                       
 
                        x = y = 350;
                        timer.addEventListener(TimerEvent.TIMER, onTick);
                        timer.start();
                        onTick()
                }
 
                private function onTick(e:TimerEvent = null):void
                {
                        date = new Date();
                        sec = date.getSeconds();
                        min = date.getMinutes();
                        hour = date.getHours();
 
                        secHand.rotation = sec * 6;
                        minHand.rotation = min * 6 + sec / 10;
                        hourHand.rotation = hour * 30 + min / 2;
                }
        }
}

Можно перемещать контейнер куда угодно, все стрелки с циферблатом будут на месте

tsarapkabel 30.10.2010 20:53

Спасибо, deamoK, всё понял!

Благодарю всех участников обсуждения за помощь! :victory:

Psy486 15.11.2010 09:30

Вложений: 1
Добрый день! (хотя если учесть только один выходной, не очень и добрый =))
Я по честному нашел поиском тему и решил новые темы не плодить, да просить прям тута.

У меня такая проблемка с аналоговыми часами, для меня странная.
Раньше использовал АС2, а тут проект притащили на АС3 и надо часики сделать.
Часики-то сделал, но к сожалению их надо повернуть влево на 45°
Когда я их проворачиваю, получается, что флешу это до задницы и он стрелки ставит относительно стандартной вертикали.
Как сделать так, чтоб он ставил стрелки относительно часов и как бы я их ни проворачивал, он брал за основу положение стрелок или еще как-то (я не совсем понимаю что ему надо.)
Часики прилагаю.

КорДум 15.11.2010 09:51

Psy486, исходник не смотрел, но вероятно вы добавляете стрелки НА циферблат, а не В контейнер с циферблатом.

Добавлено через 7 минут
Исходник посмотрел. Фу-фу-фу, плохой исходник - код в кадре, классы не используются вообще. И да, по поводу контейнера я был прав. Посмотрите, как реализованы часы в этой теме. И не пишите код в кадрах.

Psy486 15.11.2010 10:14

КорДум О как. Ну я АС3 вообще не использовал никогда и потому не вразумию как правильно =)
ОК, спасибы, пойду сейчас код тут смотреть и интегрировать О_о

Добавлено через 2 часа 41 минуту
Чего-то не знаючи АС3 сталкиваюсь с некоторыми проблемами...
Может есть у кого такой хороший исходник часиков, которые как ни верти, а правильные, чтоб я на примере глянул как на самом деле делать надо?
Буду афигительно благодарен и скажу спасибо от всей души!!!

deamoK 15.11.2010 13:36

5ью постами выше, есть код
Цитата:

Можно перемещать контейнер куда угодно, все стрелки с циферблатом будут на месте
, вертеть тоже можно

КорДум 15.11.2010 13:40

Psy486, судя по всему, вы не писали никогда на ас2, только на ас1. А там подходы достаточно похожие. Классы ас2 и классы ас3 очень схожи, если в ас2, вместо прямого назначения обработчикам события методов, назначать эти методы через Delegate с ссылкой на главный объект, к которому присобачен класс (this, как правило). Так что...что тут посоветовать - книгу Мука?


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

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