Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   плавная часовая стрелка механических часов (http://www.flasher.ru/forum/showthread.php?t=112137)

DJ_Baton 19.05.2008 18:34

плавная часовая стрелка механических часов
 
Помогите плиз, у меня есть механические часы, в них 3 стрелки - минутная, секундная и часовая, работают по принципу такому, если минут столько-то перейти в мувике минутной стрелки на тот же фрейм, т.е. минутная стрелка - 60 кадров, секундная - 60 кадров, а часовая 12, но тут возникла проблема, часовая резко скачет с одного часа на другой, как бы мне сделать часовую тоже с прокруткой на 60 кадров что бы часовая стрелка во время часа не скакала с 2-х до 3-х допустим, а плавно переходила как на нормальных наручных механических часах, помогите плиз, а то что-то не придумаю никак. Допустим мой мувиклип часовой стрелки называется hours, и я сделаю его как минутную стрелку - прокрутку на 60 кадров, помогите плиз с формулой (( как это реализовать ?
Ну или если не сложно скиньте ссылку на какой-нибудь подобный исходник я посмотрю как там сделано и смогу исправить свой...

lexa2000lexa 19.05.2008 18:43

Ну попробуй также сдедать 60 кадров в том муви который часовой, и переходи также как и в минутном муве.

DJ_Baton 19.05.2008 19:00

Леха, ты помоему чего-то не понял, часов 12 а не 60, и работает сейчас скрипт по принципу:
Код:

_root.clock.hours.gotoAndStop(_root.time_th);
//ГДЕ:
time_th = time.getHours();

т.е. 12 кадров 12 часов, я ищу формулу по которой в 60-и кадровом мувике часовой стрелки исходя из положения минутной часовая будет плавно перемещаться на 5 кадров в час т.е. на 1 деление каждый 12 минут исходя из данного периода времени

Vertax 19.05.2008 19:01

А так не проще:
Код:

onEnterFrame = function ()
{
        currDate = new Date();
        HOUR._rotation = ((currDate.getHours() > 11)?currDate.getHours():currDate.getHours()-12) * 30 + currDate.getMinutes() * 0.5;
        MIN._rotation = currDate.getMinutes() * 6 + currDate.getSeconds() * 0.1;
        SEC._rotation = currDate.getSeconds() * 6;
}


Psycho Tiger 19.05.2008 19:30

Лучший вариант предложил Vertax, AS Forever :)
Что имел ввиду lexa:
60 кадров, 60/12=5, то есть каждые 5 кадров стрелка указывает на какой нибудь час.
Далее, как я понял тебе надо - наступил новый час и стрелка передвинулась с 4 до 5, а не во время часа она плавна туда перебиралась? Тогда на каждом 5 кадре (там, где стрелка указывает на четкие часы (1,2,3 и т.д.)) поставить stop(); Далее, при новом часе мы делаем etot_mc.play() - стрелка плавно перебегает на другой час и останавливается (как ты понял, между этит каждыми 5 кадрами обычная IDE анимация)

DJ_Baton 19.05.2008 21:04

Пасиба уже помогли, вот тот вариант что мне дали очень коротко и ясно
Код:

var time = new Date();
        var hours = time.getHours();
        var minutes = time.getMinutes();
        var seconds = time.getSeconds();
        this.hour._rotation = this.hour_shadow._rotation = 30 * hours + minutes / 2;
        this.min._rotation = this.min_shadow._rotation = 6 * minutes;
        this.sec._rotation = this.sec_shadow._rotation = 6 * seconds;

Vertax, пасиба, в принципе то же самое только у тебя переменные не введены
Psycho Tiger, надо как раз как на механических часах, часовая стрелка чтобы медленно двигалась всегда а не тупо при смене часа, если делать тупо достаточно сделать 12 кадров через стоп и гоутуэндстопить мув в соответствии с текущим часом


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

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