Форум 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)
-   -   Таймер обратного отсчета на Shared Object (http://www.flasher.ru/forum/showthread.php?t=209271)

Кот Баюн 24.10.2014 16:29

Таймер обратного отсчета на Shared Object
 
Всем доброго времени суток!
Возникла одна трудность.

Видел в Интернете исходники таймеров обратного отсчета, на которых можно засечь N часов-минут-секунд, вроде бы все понятно.
А как можно прикрутить такой таймер к SharedObject, чтобы после закрытия флешки отсчет продолжался?

Возможно для этого надо записать текущую дату-время и дату-время окончания таймера и сверять их при открытии флешки?

silin 24.10.2014 21:19

что-то вы тут недоформулирвали: если после закрытия отсчет продолжается, то и сравнивать нужно текущее системное время с временем Ч, зачем нужно время закрытия предыдущей флешки ?

Кот Баюн 24.10.2014 23:06

наверное недоформулировал.
ну короче говоря, примерно так.

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

то есть, если открыть флешку через четыре часа, то он показывал бы, что два осталось.


Получается, записать в Shared Object начало и конец отсчета и отследить, идет отсчет или нет.

silin 24.10.2014 23:30

>>я хочу засечь, допустим, шесть часов с какого-то момента

когда этот момент наступит, запоминаем его в SO
при следующем старте используем для сравнения с текущим временем

вопрос-то в чем?

Кот Баюн 25.10.2014 11:14

вопрос в том, что не знаю, как на практике прикрутить код от обычного таймера к SO.
опыта мало в этом.

dark256 25.10.2014 12:01

А что та прикручивать-то? Записать в СО две цифирки - время старта и время длительности отсчета.
При запуске считываем, вычитаем и видим сколько ост.

Код AS1/AS2:

function loadSettings( file, defaults ){
 
        var answer = new Object()
        var newset = SharedObject.getLocal( file )
 
        if ( newset.data.dat != undefined )
        {
                trace(file+" ### Settings Loaded. OK")
                answer = newset.data.dat
        }
        else
        {
                trace(file+" ### No Settings")
                saveSettings( file, defaults )
                answer = defaults
        }
        return answer               
 
}
function saveSettings( file, obj ){
        trace("### Save settings: "+file)
        var saveset = SharedObject.getLocal( file )       
        saveset.data.dat = obj
        saveset.flush()               
 
}
 
var timerData = loadSettings("my_timer", {start:new Date(), finish:new Date()+10000})

По дефолту имеем данные для 10-секундного каунтдауна.

Для нескоькоих таймеров сохраняем не единичный объект, а массив объектов.
http://vk.com/TIMERS

Кот Баюн 25.10.2014 12:35

Что-то я не совсем понял, куда они выводятся, цифры-то
Переменная timerData выдает значение [object Object]

dark256 25.10.2014 19:54

timerData.start
timerData.finish

Кот Баюн 26.10.2014 10:43

Интересно получается, старт у нас

Mon Oct 27 12:41:19 GMT+0600 2014

а финиш

Mon Oct 27 12:41:19 GMT+0600 201410000

что-то не так

dark256 26.10.2014 12:51

Я на вскидку код даты кинул. Допилить до работоспособного состояния слегка неплохо бы.

Кот Баюн 26.10.2014 17:32

так Date же стринговая, получается?
как ее превратить в число?

dark256 26.10.2014 18:01

Вот интересно.... А что мешает заглянуть в хэлп по данному классу и почитать?

Код AS1/AS2:

var A:Date = new Date()
 
trace(A)
 
trace(A.valueOf())
 
var B = A.valueOf()+10000
 
trace( new Date(B) )
 
trace( new Date(B).getSeconds() )

Добавлено через 6 минут
Цитата:

Сообщение от Кот Баюн (Сообщение 1174155)
так Date же стринговая, получается?
как ее превратить в число?

Ну и к слову она НЕ стринговая. Это гигантский объект с огромной кучей свойств и мощных методов.

Кот Баюн 26.10.2014 18:11

Тогда мне проще оперировать уже с Hour

dark256 26.10.2014 18:46

Оперировать можно вообще с полным списком параметров.

Кот Баюн 26.10.2014 19:14

Но мне таймер нужен только часовой.
Мне надо засечь несколько часов.

Попробую как-нибудь это прикрутить...

dark256 26.10.2014 19:42

Вложений: 2
Ну вы блин даете... что там прикручивать-то?

Код AS1/AS2:

var start:Date = new Date()
var finish = start.valueOf() + 60(минут)*60(секунд)*(кол-во часов каунтдауна)*1000

Для просветления разума :)

checkDat_ext_2.swf   (38.1 Кб)


Код во вложении не слишком красив, но все мыслимые извращения с датой там проделаны.

Кот Баюн 26.10.2014 19:47

финиш выдает NaN


Если бы я каждый день программировал, я бы так не тупил)))
наверно....
Признаюсь, в программировании я полный пень))

несмотря на то, что учился на программиста... давно когда-то

dark256 26.10.2014 19:51

Создайте новый ФЛА, и эскпериментируйте с трэйсами, пока не поймете как класс Дата работает.
Там много всего, но как только вникните в суть и познаете Дао, сразу увидиет, что все это яйца ломаного не стоит и все очень просто.

Добавлено через 1 минуту
Цитата:

Сообщение от Кот Баюн (Сообщение 1174171)
финиш выдает NaN

А если так:
Код AS1/AS2:

var estimatedHourWaiting = 1
var finish = start.valueOf() + 60*60*estimatedHourWaiting *1000


Кот Баюн 26.10.2014 20:03

Цитата:

Создайте новый ФЛА, и эскпериментируйте с трэйсами,
Так ведь так же и сделал.
До этого догадался.

Цитата:

Там много всего, но как только вникните в суть и познаете Дао,
Уже 10 лет как пытаюсь смиренно познать сиё Дао.
Дальше if else не ушел пока.

Цитата:

А если так:
Выдает 1414429311531
Это правильное число?
По отношению к 6 часам?
Там как, миллисекундами меряет?

dark256 26.10.2014 20:06

Яволь. Миллисекунды. В приложенной выше флэшке можно видеть как UNIX-время преобразуется туда сюда обратно и по всякому. Вообще-то почитать в Википедии про этот формат вполне возможно.

https://ru.wikipedia.org/wiki/UNIX-%...B5%D0%BC%D1%8F

Кот Баюн 26.10.2014 20:56

а когда он отсчитает 6 часов, то что выдаст в trace?

dark256 26.10.2014 23:23

О как..... Есть текущее время и БУДУЩЕЕ..... считаем разницу и показыаем отсчет...... Когда отсчитает, очевидно, что разница станет отрицательной :)
Соотв этот момент ндо отловить и .... ну тут вариантов масса :)
Вы оперируете не собственно ДАТОЙ, а разностными величинами. Которые надлежащим образом обрабатываете и отображаете......... Что он там выдаст - это вам решать и программить :)

Во вообще идеальный пример извращения.

Таймер на 35 сек. Вывод - в текстовый блок на стэйдже.

Код AS1/AS2:

var targetDate:Date = new Date().valueOf()+60*60*1000*0.01;
 
onEnterFrame = function()
{
        var DEC:Date = new Date( targetDate - new Date() )
        out.text =  DEC.getUTCHours()+":"+DEC.getMinutes()+":"+DEC.getSeconds()
        out.text += "\n"+DEC.valueOf()
}


silin 27.10.2014 10:13

Цитата:

Сообщение от Кот Баюн (Сообщение 1174078)
вопрос в том, что не знаю, как на практике прикрутить код от обычного таймера к SO.
опыта мало в этом.

Код AS1/AS2:

var tf:TextField;
var curTime:Number;
var so:SharedObject;
var totTime:Number=6;
 
 
tf = this.createTextField("tf", 0, 0, 0, 200, 80);
so = SharedObject.getLocal("countdown", "/");
if (so.data.elapsedTime) {
        // процесс уже запущен, стартуем счет
        startCount();
 
 
} else {
        //нет данных, создаем и ждем отмашки на старт (любой клик)
        so.data.elapsedTime = 0;
        tf.text = "кликните где-нибудь для старта";
        this.onMouseDown = startCount;
 
}
 
function startCount() {
        curTime = getTimer();
        this.onEnterFrame = this_onEnterFrame;
        this.onMouseDown = null;
}
 
function this_onEnterFrame() {
        // добавляем время счетчику
        var time:Number = getTimer();
        so.data.elapsedTime += time-curTime;
        curTime = time;
 
        // показываем сколько прошло\осталось
        var d:Date = new Date();
        d.setTime(so.data.elapsedTime);
        tf.text = "истрачено  "+d.getUTCHours()+":"+d.getUTCMinutes()+":"+d.getUTCSeconds();
        d.setTime(totTime*60*60*1e3-so.data.elapsedTime);
        tf.text += "\nосталось    "+d.getUTCHours()+":"+d.getUTCMinutes()+":"+d.getUTCSeconds();
}

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

dark256 27.10.2014 10:29

Цитата:

Сообщение от silin (Сообщение 1174194)
d.getUTCHours()+":"+d.getUTCMinutes()+":"+d.getUTCSeconds();

Икскьюзми, магистр (с), а использование ЮТС минут-секунд действительно имеет какой-то практический смысл, или это просто решение задачи в общем виде?

silin 27.10.2014 10:49

дада, это на случай когда нашей думе некуда уже будет часовые пояса двигать и они примутся за минутные и секундные :)

dark256 27.10.2014 17:55

Понятно. Предусмотрительно :)


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

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