Форум 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=140510)

Acxat 01.06.2010 10:59

аналоговые часы с подгрузкой времени с сервера и чтоб стрелки вертелись
 
Помогите пожалуйста?! :)
Мне нужны аналоговые часы с подгрузкой времени с сервера и чтоб стрелки вертелись.

Eсть PHP файл time.php с кодом:

Код:

<?php
echo 'theTime='.urlencode(date('g:i:s A')).'&theHour='.urlencode(date('g')).'&theMinutes='.urlencode(date('i')).'&theSeconds='.urlencode(date('s')).'&amORpm='.urlencode(date('A'));
?>

Есть код для Flash:

Код AS1/AS2:

myVars = new LoadVars();
myVars.load("http://yourserver.com/time.php");
 
myVars.onLoad = function(success) {
        if (success) {
                trace("variables loaded");
                trace(this.theTime);
                trace(this.theHour);
                trace(this.theMinutes);
                trace(this.theSeconds);
                trace(this.amORpm);
        } else {
                trace("Error loading page");
        }
};
 
time = theTime();// time object
seconds = theSeconds();
minutes = theMinutes();
hours = theHour();
 
hours = hours+(minutes/60);
 
seconds = seconds*6;// calculating seconds
minutes = minutes*6;// calculating minutes
hours = hours*30;// calculating hours
 
sec._rotation = seconds;// giving rotation property
min._rotation = minutes;// giving rotation property
hour._rotation = hours;// giving rotation property

Время выводит на Output пример: 11:49:57 AM
Вот стрелки не крутятся совсем.

Заранее спасибо!

udaaff 01.06.2010 11:14

Для оформления своего кода надо использовать теги [code][/code]

mooncar 01.06.2010 11:37

Ну нужно же непрерывно получать данные и непрерывно их выводить.
Типа такого:
Код AS1/AS2:

setInterval (loadTime, 500);
 
function loadTime () {
        myVars.load('http://yourserver.com/time.php');
}


Видимо, в примере за кадром остались также функции theTime() и прочие.
Все действия по выводу можно писать либо отдельно также где-нибудь с помощью еще одного setInterval, а можно даже внутри loadTime.
Если что, можно поднять частоту, уменьшив интервал с 500, например до 100, правда не уверен, что такая частота запросов скрипта - хорошо с точки зрения нагрузки на сервер.

Мысль еще такая есть - может быть просто сделать один запрос на серверное время, сравнить его со временем на локальной машине пользователя и выводить время, основываясь на времени клиентской машины (с помощью getTime), но с коррекцией, основанной на сервеном времени (учесть разницу).

PS. Кстати, что значит "аналоговые"?

Acxat 01.06.2010 13:32

Аналоговые часы - это часы со стрелками

Tails 01.06.2010 13:39

mooncar
Загрузки 1 раз будет недостаточно ? :)
помогите плз в соседней теме.

mooncar 01.06.2010 13:46

Если вам нужна актуальная информация о времени, то ее и получать нужно с требуемой частотой. Разве это не очевидно?

Acxat 01.06.2010 13:46

Хотелось бы посмотреть на код полностью так как во Flash я почти полный ноль (

mooncar 01.06.2010 14:29

Цитата:

Сообщение от Acxat (Сообщение 912242)
Хотелось бы посмотреть на код полностью так как во Flash я почти полный ноль (

На какой код вы хотите взглянуть? Вроде вы сами написали "есть код для Flash".
Судя по нему, вам нужно нарисовать стрелки sec, min и hour, и поместить
вот этот блок в подинтервальную функцию:
Код AS1/AS2:

hours = hours+(minutes/60);
 
seconds = seconds*6;// calculating seconds
minutes = minutes*6;// calculating minutes
hours = hours*30;// calculating hours
 
sec._rotation = seconds;// giving rotation property
min._rotation = minutes;// giving rotation property
hour._rotation = hours;// giving rotation property

И еще понять, что подразумевается в приведенном вами куске кода вот здесь
Код AS1/AS2:

time = theTime();// time object

и далее... что это за функции? Они не приводятся.
Скорее всего в них осуществляется перевод полученных с сервера данных в целочисленные значения AS, которые и используются для дальнейших вычислений:

Код AS1/AS2:

myVars.onLoad = function(success) {
        if (success) {
                hours = Number(this.theHour);
                minutes = Number(this.theMinutes);
                seconds = Number(this.theSeconds);
        }
};


rainbowrussia 02.06.2010 04:52

Цитата:

Сообщение от mooncar (Сообщение 912241)
Если вам нужна актуальная информация о времени, то ее и получать нужно с требуемой частотой. Разве это не очевидно?

Ну зачем же. Достаточно получить 1 раз "базовое" время, затем остается только к нему добавлять getTimer(). Вероятностью аномального течение системного времени на компьютере пренебрегаем.

Но если нужно очень высокая точность синхронизации, то тут нужно делать несколько запросов, вычислять время задержки ответа от сервера и тд. Рядом есть тема про дату - http://www.flasher.ru/forum/showthread.php?p=912440 Задачи похожие - отсчитывать время от заданного.

mooncar 02.06.2010 10:10

rainbowrussia, я об этом и говорил
Цитата:

Сообщение от mooncar (Сообщение 912211)
Мысль еще такая есть - может быть просто сделать один запрос на серверное время, сравнить его со временем на локальной машине пользователя и выводить время, основываясь на времени клиентской машины (с помощью getTime), но с коррекцией, основанной на сервеном времени (учесть разницу).

А насчет актуальности - пытался просто донести мысль до автора, что один раз сделать запрос недостаточно, информацию надо обновлять - даже с помощью getTimer() или getTime() она все равно нуждается в актуализации.
У него же первое затруднение вызвало то, что информация в приведенном коде не обновляется.


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

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