PDA

Просмотр полной версии : Часы: плавный поворот секундной стрелки


ican
08.06.2006, 12:14
Как сделать сабж?
Акшен такой:

===
time = new Date();
s = time.getSeconds();
m = time.getMinutes();
h = time.getHours();
setProperty ("min", _rotation, m*6+s*0.1);
setProperty ("sec", _rotation, s*6);
setProperty ("hour", _rotation, h*30+m*0.5);
===

Но при этом секундная стрелка движется рывками.
А есть желание, шоп она двигалась плавненько...

Варианты типа
===
time = new Date();
s = time.getSeconds();
m = time.getMinutes();
h = time.getHours();
setProperty ("min", _rotation, m*6+s*0.1);
setProperty ("sec", _rotation, s*6); tolko plavno pozhalusta
setProperty ("hour", _rotation, h*30+m*0.5);===
не предлагать: не работают... :)

iNils
08.06.2006, 12:20
Вместо getSeconds() пользоваться getMilliseconds()

ican
08.06.2006, 12:29
А значение на поворот, если не влом? :)
Сам-то проверял?
не работает. хех :(

iNils
08.06.2006, 12:39
Вернее не вместо, а вместе.
var time = new Date ();
var s = time.getSeconds ();
var ms = time.getMilliseconds ();
var m = time.getMinutes ();
var h = time.getHours ();
sec._rotation = s * 6 + ms * 0.006;
min._rotation = m * 6 + s * 0.1;
hour._rotation = h * 30 + m * 0.5;

ican
08.06.2006, 12:49
Всё равно рывками... :(
правда мелкими, а хотелось, штоп плавно

iNils
08.06.2006, 12:52
Всё равно рывками... :(
А это зависит от того как часто ты вызываешь обновление.
Смотри пример.

В setInterval можешь сменить 10 на 1 и будет еще плавнее, но будет больше нагрузка на систему.

ican
08.06.2006, 13:35
Спасип! помогло.
Оказываецца нет здоровых людей - есть необследованные...
Клинический случай. (про мене)

Ion
08.06.2006, 15:35
Так же нет на компе и плавых движений - есть очень мелкие рывки

iNils
08.06.2006, 16:13
Так же нет на компе и плавых движений - есть очень мелкие рывки
В моем примере?

ican
12.06.2006, 14:47
Да, в твоём примере тоже.
Чем сильнее увеличиваешь объект, тем заметнее рывки.
т.е. если часы 100х100px, то, конечно же, не заметно этих самых рывком, но если нажать на Ctrl+А - будет начного чётче видно, что стрелка всё-таки дёргаецца! молкой дрожью :)

iNils
12.06.2006, 14:53
Не понимаю о чем ты.
Ctrl+А это что?

Ion
12.06.2006, 15:52
Он (и я) о том, что на компе всё дискретно, в т.ч. и движение

iNils
12.06.2006, 16:08
Он (и я) о том, что на компе всё дискретно, в т.ч. и движение
Это и так понятно. Поставил вызов функции через setInterval каждую миллисекунду с updateAfterEvent, реально все жы выходит каждые 2 миллисекунды (это получается фпс 500). Быстрее не куда :)

ican
13.06.2006, 13:23
Ну, и напряг на систему вырос.
А изначальная задача (сорри, что не упоминал об этом) сделать скринсейвер с часиками. Что же будет, если скринсейвер будет отъедать у системы львиную долю ресурсов? ОФИГЕТЬ!

А про "Ctrl+А" - извиняй: следует читать как "Ctrl+F" (пунтосвитчер подгадил). Хех.

iNils
13.06.2006, 13:59
Простая математика:
Если умудриться сделать отрисовку 500 кадров в секунду (что на всем машинам по силу), то получится что за минуту мы отрисуем 30'000 раз. Теперь берем круг в котором 360 градусов, делим на наши 30 тысяч и получаем сдвиг за каждую отрисовку на 0,012 градуса.
Увидить такой сдвиг вы физически не сможите. И по скорости (500 это не шутка) и по возможности вашего глаза разглядеть это.
А вобще получаемое дергание, это результат не точной отрисовки поворачиваемого объекта, он деформируется :)

1,5 года назад я делал скринсейвер с часами, но не стал делать плавное движение, а наоборот оставил дискретность.