Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Остановить таймер (или много таймеров) (http://www.flasher.ru/forum/showthread.php?t=156097)

Ylik 16.05.2011 18:04

mc2 = 1 - это так... То есть при нажатии на вторую кнопку оно становится mc2 = 0 и останавливается таймер.

А про функцию timerStop():

Код AS3:

btn1.addEventListener(MouseEvent.CLICK, onClick);
btn2.addEventListener(MouseEvent.CLICK, timerStop);

Это как пример.

Добавлено через 4 минуты
Суть в том, что функция timerStop срабатывает, а таймер не останавливается.

maxkar 16.05.2011 18:30

Цитата:

Сообщение от Ylik (Сообщение 996454)
Ну что, никто не понял, в чём может быть проблема? :(
Я не понимаю...

Код в кадрах? Там новый таймер нигде не пересоздается лишний раз? Мне кажется, что Cheburashka прав.

Лучше сделайте минимальный компилируемый пример, на котором другие смогут увидеть проблему, а не просто приводите фрагменты кода (без контекста).

Ylik 16.05.2011 18:31

Нет, код в классе.

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

btn1.addEventListener(MouseEvent.CLICK, onClick);
btn2.addEventListener(MouseEvent.CLICK, timerStop);
mc1.visible=false;
mc2.visible=false;
mc3.visible=false;
 
function timerStop(e:MouseEvent):void {
                mc3.visible=true;
                timer.stop();
                timer.removeEventListener(TimerEvent.TIMER,onTimer);
                timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
                timer.removeEventListener(TimerEvent.TIMER,onTimer1);
                timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete1);
}
 
var timer:Timer = new Timer(5000, 1);
 
function onClick(e:MouseEvent):void{
                mc1.visible=true;
                timer.addEventListener(TimerEvent.TIMER, onTimer);
                timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
                timer.start();
}
function onTimer(event:TimerEvent):void {
                mc1.visible=false;
}
function onTimerComplete(event:TimerEvent):void {
                mc2.visible=true;
}
 
function onClick1(e:MouseEvent):void{
                mc1.visible=true;
                timer.addEventListener(TimerEvent.TIMER, onTimer1);
                timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete1);
                timer.start();
}
function onTimer1(event:TimerEvent):void {
                mc2.visible=false;
}
function onTimerComplete1(event:TimerEvent):void {
                mc2.visible=true;
}

примерно так

tsarapkabel 16.05.2011 18:42

Если таймер вызывается, значит кто-то его вызывает! :D
А если он не нужен, может просто timer = null ?

Ylik 16.05.2011 18:45

Ну вот, по-идее при нажатии на btn1 начинается функция onClick (и onClick1, просто написать забыла)
Сейчас попробую. :)

Добавлено через 3 минуты
Что-то не получается опять. :(

Добавлено через 7 минут
Вот ещё уточнение с классом:

Код AS3:

public class Gl extends MovieClip {
 
      public function Gl() {
 
btn1.addEventListener(MouseEvent.CLICK, onClick);
btn2.addEventListener(MouseEvent.CLICK, timerStop);
mc1.visible=false;
mc2.visible=false;
mc3.visible=false;
 
function timerStop(e:MouseEvent):void {
                mc3.visible=true;
                timer.stop();
                timer.removeEventListener(TimerEvent.TIMER,onTimer);
                timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
                timer.removeEventListener(TimerEvent.TIMER,onTimer1);
                timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete1);
                }
      }
 
var timer:Timer = new Timer(5000, 1);
 
function onClick(e:MouseEvent):void{
                mc1.visible=true;
                timer.addEventListener(TimerEvent.TIMER, onTimer);
                timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
                timer.start();
}
function onTimer(event:TimerEvent):void {
                btn1.addEventListener(MouseEvent.CLICK, onClick1);
                mc1.visible=false;
}
function onTimerComplete(event:TimerEvent):void {
                mc2.visible=true;
}
 
function onClick1(e:MouseEvent):void{
                mc1.visible=true;
                timer.addEventListener(TimerEvent.TIMER, onTimer1);
                timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete1);
                timer.start();
}
function onTimer1(event:TimerEvent):void {
                mc2.visible=false;
}
function onTimerComplete1(event:TimerEvent):void {
                mc2.visible=true;
}
}


maxkar 16.05.2011 19:08

Фигурные скобки правильно скопированы? Если правильно, то timerStop объявлена локально в конструкторе. Вынесите на уровень класса, должно помочь. Flash player установлен релизный?

Ylik 16.05.2011 19:10

Сейчас попробую.
Флеш плеер недавно обновляла.

Добавлено через 3 минуты
Да, я неправильно здесь написала. Там всё так, как написали вы - timerStop находится в классе. Так что какая-то другая проблема тут... :(

Cheburashka 16.05.2011 19:44

Так как, repeatCount = 1:
Код AS3:

var timer:Timer = new Timer(5000, 1);

Оба этих события наступят в один момент:
Код AS3:

timer.addEventListener(TimerEvent.TIMER, onTimer); 
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

Попробуйте упростить свой код, выкинув любой из них (я бы предложил TimerEvent.TIMER).

Добавлено через 1 минуту
И в каждом обработчике выведите:
Код AS3:

trace(имя_метода);

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

Ylik 16.05.2011 19:45

Спасибо, сейчас попробую. :)

Добавлено через 24 минуты
Ух... Нашла!!! :)
Вот эти ошибки:
Цитата:

Сообщение от tsarapkabel (Сообщение 996475)
Логика не ясна.
3) И по коду никто не вызывает функцию timerStop()!!!


Цитата:

Сообщение от Cheburashka (Сообщение 996526)
И в каждом обработчике выведите:
Код AS3:

trace(имя_метода);

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

Из-за невнимательности... :rolleyes:
А я уж все мозги сломала... :D
Спасибо ОГРОМНОЕ, что уделили время!!! Помогли разобраться!!! :yahoo:


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

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