Форум 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)
-   -   часы: альтернатива onEnterFrame (http://www.flasher.ru/forum/showthread.php?t=120240)

polol 15.01.2009 12:44

часы: альтернатива onEnterFrame
 
в скрипт встроены часы типа getDate. поскольку часы это только часть кода, то просчет времени onEnterFrame очень отягощает. какие могут быть альтернативы? точно ли будет отмерять время setInterval поставленный, скажем, на пол-секунды?

Zik. 15.01.2009 13:22

вообще не понятно чего вы хотите

Волгоградец 15.01.2009 13:53

Сам setInterval ничего не отмеряет. Можно поставить интервал в 1с чтобы обновлять экран раз в секунду.

polol 15.01.2009 14:54

я использую объект типа new Date, чтобы получать в режиме реального времени секунды, минуты, часы. в сцене объект движется в зависимости от этих данных (секунды умножаются на определенное число и это число задает координаты для объекта в сцене). и на данный момент время запрашивается onEnterFrame и объект движется onEnterFrame.

Zik. 15.01.2009 15:05

опять ничего не понял. если вам нужны только секунды, тогда:
Код AS1/AS2:

_root.onEnterFrame = function() {
      var a:Date = new Date();
      a.getSeconds();
}


Волгоградец 15.01.2009 16:20

Если юзать onEnterFrame, то при частоте кадров 30 будет 30 раз запрошено одно и то же значение - пустая трата ресурсов. В интервале логичнее было бы запрашивать текущее время.
Код AS1/AS2:

var a:Date = new Date();
var b:Number = a.getSeconds();
 
function seconds():Void{
  b = a.getSeconds();
}
 
var intID:Number = (this, "seconds", 1000);


chingachgoog 15.01.2009 16:28

Если нужно просто отлавливать полсекунды, то лучше setInterval трудно, что-то придумать - тогда может вообще эта затея с Date не нужна?

Fatality 15.01.2009 17:30

Цитата:

Сообщение от Волгоградец (Сообщение 790867)
var intID:Number = (this,"seconds",1000);

это как понимать ?оО

Код:

var intID:Number = setInterval(this, "seconds", 1000);
1000 милисекунд тут использовать нежелательно, если процессор будет перегружен и справится не за 1000, а например за 1018, в идеале использовать 250

polol 15.01.2009 18:55

большое спасибо за ответы.

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

Fatality 15.01.2009 19:09

Цитата:

Сообщение от polol (Сообщение 790932)
самый ли этот нетребовательный к ресурсам способ?

в подобном приложении разница в производительности от использования объекта или храниения значений в отдельных переменных если и есть то настолько незначительна что не стоит об этом заморачиваться.
Делай как тебе удобнее, но лично я бы тоже выбрал объект =)

polol 15.01.2009 19:55

а как сделать атрибуты прототипа обновляемыми через интервал? я делаю trace

Код AS1/AS2:

function traceIT (){
                        trace(_root['time']['mydate'].sec + "REPEATING")
 
        }
setInterval(this, "traceIT", 100)

вот этого:

Код AS1/AS2:

time = new Object();
 
 
time.mydate = new Date();
 
 
 
function seconds():Void{
  time.mydate.sec = time.mydate.getSeconds();
 
}
 
 
setInterval(this, "seconds", 250);





но это,конечно же, неверно :)

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

Fatality 15.01.2009 21:02

В функции seconds ты получаешь секунды из объекта Date, но значение самого объекта не обновляется.
Соответственно делаем так:
Код AS1/AS2:

time = new Object();
function seconds():Void
{
  time.mydate = new Date();
  time.mydate.sec = time.mydate.getSeconds();
}
setInterval(this, "seconds", 250);

и все работает.

P.S еще я не пойму зачем тебе этот мусор в коде
Код AS1/AS2:

function traceIT (){
                        trace(_root['time']['mydate'].sec + "REPEATING")
 
        }
setInterval(this, "traceIT", 100)

не проще ли выводить эти данные сразу в функции seconds ?

polol 15.01.2009 21:25

Цитата:

P.S еще я не пойму зачем тебе этот мусор в коде
я просто считываю с другого уровня. а код ваш заработал, только выдает раз в одну десятую секунды undefined. издержки setInterval, надо полагать. надеюсь, в дальнейшем это не скажется, в любом случае onEnterFrame жрет столько, что я его себе позволить не могу.

2 Fatality:
спасибо

Fatality 15.01.2009 22:05

Цитата:

Сообщение от polol (Сообщение 791008)
только выдает раз в одну десятую секунды undefined. издержки setInterval

конечно будет выдавать undefined так как у тебя данные обновляются раз в 250 мс, а отображаются раз в 100.
Разные уровни...
так это не проблема, можешь обращаться к переменной так _levelN.переменная где N - номер уровня или использовать свойство _global при объявлении переменной.


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

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