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

_LennY_ 18.01.2012 12:42

Как сбросить таймер в функции?
 
Вложений: 1
Доброго времени суток, форумчане! Назрел вопрос, как сбросить таймер в задаваемой функций?

Создаю слой и размещаю в первом кадре динамические текстовые поля минуты и секунды двух таймеров(переменные m, s, m1, s1) и присваиваю им начальное значение 0

Код AS1/AS2:

m = 0; // начальное время минуты
s = 0; // начальное время секунды
m1 = 0; // начальное время минуты
s1 = 0; // начальное время секунды
rs =0;
rs1 =0;

Во втором кадре пишу функцию вычисления времени первого и второго таймера (второй быстрей первого)

Код AS1/AS2:

 
stop();
count = function () {
 
// правильное время
s = int(getTimer() / 1000 ) - rs // время секунды
// время минуты
if ( s > 59 ) {
              m = m + 1;
              rs = int(getTimer() /1000)
              }
// не правильное время
s1 = int(getTimer() / 600 ) - rs1 // время секунды (идут быстрее)
// время минуты
if ( s1 > 59 ) {
                m1 = m1 + 1;
                rs1 = int(getTimer() /1000)
              }
};
// запуск функции
interval = setInterval(count, 1);
count();

А так же рисую кнопку остановки функции ("стоп") с кодом

Код AS1/AS2:

 
on(release) {
        clearInterval(interval);
        gotoAndPlay(3);
}

В третьем кадре делаю кнопку "заново" с кодом

Код AS1/AS2:

 
on(release) {
        gotoAndPlay(1);
}

В итоге получаю: при старте ролика время идет правильно в обоих таймерах с нужным ускорением, при нажатии кнопки "стоп" время останавливается как надо, но при нажатии "заново" время не сбрасывается, а продолжает идти с момента старта мувика... Как мне это поправить? буду рад любым предложениям и советам. исходник прилагаю

eight.alex 18.01.2012 16:34

Попробуйте в третьем кадре обнулить переменные.
Код AS1/AS2:

on(release) {
gotoAndPlay(1);
m = 0;
s = 0;
m1 = 0;
s1 = 0;
rs =0;
rs1 =0;
}


_LennY_ 18.01.2012 22:40

eight.alex , пробовал... к сожалению не помогло ...

stantler 20.01.2012 07:27

Цитата:

Сообщение от eight.alex (Сообщение 1057702)
Попробуйте в третьем кадре обнулить переменные.
Код AS1/AS2:

on(release) {
gotoAndPlay(1);
m = 0;
s = 0;
m1 = 0;
s1 = 0;
rs =0;
rs1 =0;
}


Этот вариант не подойдет, т.к. переменные не видны из этой функции. Попробуйте обращаться к абсолютному пути: _root.m, _root.s и т.д.

_LennY_ 20.01.2012 11:59

stantler, нет... не помогло... в первый и в третий кадр вставляю :

Код AS1/AS2:

_root.m = 0; // начальное время минуты
_root.s = 0; // начальное время секунды
_root.m1 = 0; // начальное время минуты
_root.s1 = 0; // начальное время секунды
_root.rs =0;
_root.rs1 =0;

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

eight.alex 20.01.2012 19:13

Переменная во всех кадрах находится?

_LennY_ 20.01.2012 21:08

eight.alex, да во всех . в первом и третьем их обнуление указанным выше способом, во втором функция

stantler 22.01.2012 20:48

Тогда сделайте так, в функции, которая обращается к переменным просто вызовите "trace(this);" и посмотрите путь. А потом уже этот путь подставте в функцию обнуления

_LennY_ 23.01.2012 11:43

Цитата:

Сообщение от stantler (Сообщение 1058461)
Тогда сделайте так, в функции, которая обращается к переменным просто вызовите "trace(this);" и посмотрите путь. А потом уже этот путь подставте в функцию обнуления

А можно поподробнее ? Если вставляю в функцию "trace(this);" то трэйс выдаёт - "undefended" .... Может что-то не так делаю ?

stantler 24.01.2012 06:37

Цитата:

Сообщение от _LennY_ (Сообщение 1058550)
А можно поподробнее ? Если вставляю в функцию "trace(this);" то трэйс выдаёт - "undefended" .... Может что-то не так делаю ?

Странно.
Попробуйте вставить "trace(this)" перед стоп, в начале функции count() и после или до задания переменных. По идее трэйс должен выдать путь, где выполняются функции

_LennY_ 27.01.2012 15:12

Как сбросить таймер в функции?
 
Цитата:

Сообщение от stantler (Сообщение 1058743)
Странно.
Попробуйте вставить "trace(this)" перед стоп, в начале функции count() и после или до задания переменных. По идее трэйс должен выдать путь, где выполняются функции

Меняю код на следующий :

Код AS1/AS2:

 
stop();
trace(this);
count = function () {
trace(this);
// правильное время
s = int(getTimer() / 1000 ) - rs // время секунды
// время минуты
if ( s > 59 ) {
              m = m + 1;
              rs = int(getTimer() /1000)
              }
// не правильное время
s1 = int(getTimer() / 600 ) - rs1 // время секунды
// время минуты
if ( s1 > 59 ) {
                m1 = m1 + 1;
                rs1 = int(getTimer() /1000)
              }
};
trace(this);
// запуск функции
interval = setInterval(count, 1);
trace(this);
count();
trace(this)

Но всё равно получаю "Undefended"

alexcon314 27.01.2012 17:04

getTimer() возвращает время с момента старта ролика. При перезапуске вашего таймера надо это учитывать.
Код AS1/AS2:

// кадр 1
m = 0; // начальное время минуты
s = 0; // начальное время секунды
m1 = 0; // начальное время минуты
s1 = 0; // начальное время секунды
rs =0;
rs1 =0;
t1=getTimer();

Код AS1/AS2:

// кадр 2
stop();
count = function () {
t = getTimer() - t1;
// правильное время
s = int(t / 1000 ) - rs // время секунды
// время минуты
if ( s > 59 ) {
              m = m + 1;
              rs = int(t /1000)
              }
// не правильное время
s1 = int(t / 600 ) - rs1 // время секунды
// время минуты
if ( s1 > 59 ) {
                m1 = m1 + 1;
                rs1 = int(t /1000)
              }
};
// запуск функции
interval = setInterval(count, 1);
count();


_LennY_ 30.01.2012 11:40

Цитата:

Сообщение от alexcon314 (Сообщение 1059476)
getTimer() возвращает время с момента старта ролика. При перезапуске вашего таймера надо это учитывать.

Попробывал и ваш метод, но теперь почему-то при начале второго цикла секунды таймеров начинают считаться с минусовых значений (-3... -2...-1) и минусовое время тем больше, чем больше задержка нажатия на кнопку "пуск" (т.е. если нажать на "стоп", подождать примерно минуту и нажать на кнопку "пуск" время обоих таймеров пойдёт примерно с -40 секунд... при третьем запуске цикла -80 секунд и т.д)

Добавлено через 10 минут
Уже посещает идея сделать два мувика... и по нажатию кнопки первый мувик закрывал и открывал второй мувик в котором уже считалась бы функция времени таймеров...но это будет слишком наверчено

alexcon314 30.01.2012 13:08

Вложений: 1
не понял. у меня всегда с нуля циферки идут.

Tails 30.01.2012 14:58

Вложений: 1
И чего вы тут уже третий день обсуждаете ? :)
кадр 1:
Код AS1/AS2:

m = 0; // начальное время минуты
s = 0; // начальное время секунды
m1 = 0; // начальное время минуты
s1 = 0; // начальное время секунды
rs =0;
rs1 =0;
var lastGetTimer        = getTimer();
var thisTimer                = getTimer();

кадр2:
Код AS1/AS2:

stop();
 
count = function () {
thisTimer = getTimer()-lastGetTimer;
 
// правильное время
s = int(thisTimer / 1000 ) - rs // время секунды
// время минуты
if ( s > 59 ) {
              m = m + 1;
              rs = int(thisTimer /1000)
              }
// не правильное время
s1 = int(thisTimer / 600 ) - rs1 // время секунды
// время минуты
if ( s1 > 59 ) {
                m1 = m1 + 1;
                rs1 = int(thisTimer /1000)
              }
};
// запуск функции
interval = setInterval(count, 1);
count();

getTimer() - сбросить нельзя, но его можно запомнить.
И пишите в одном кадре, самим же проще потом будет.

Исходничек:

_LennY_ 03.02.2012 14:52

Цитата:

Сообщение от alexcon314 (Сообщение 1059960)
не понял. у меня всегда с нуля циферки идут.

Цитата:

Сообщение от Tails (Сообщение 1060003)
И чего вы тут уже третий день обсуждаете ? :)

getTimer() - сбросить нельзя, но его можно запомнить.
И пишите в одном кадре, самим же проще потом будет.

Исходничек:

Респект и уважуха авторам предыдущих постов... действительно про то что надо запомнить getTimer я не подумал :)


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

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