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

Astraport 26.04.2011 00:35

Почему таймер не останавливается?
 
Что-то не пойму, остановить таймер мало? Нужно обязательно от слушателя отписываться?

Код AS3:

private var myTimer:Timer = new Timer(60000);
 
myTimer.start();
myTimer.addEventListener(TimerEvent.TIMER, myStatus);
 
public function myStatus(value:String):void {       
        myTimer.stop();
        trace ('Я таймер')//Продолжаем трейсить каждую минуту не смотря на stop
                }


honest_man 26.04.2011 01:15

Интересно.. А если поменять местами строки:
myTimer.addEventListener(TimerEvent.TIMER, myStatus);
myTimer.start();
результат не изменится?

Может тогда заточить их в тело конструктора класса?

Вообще, в идеальном мире, должно останавливаться. И точку с запятой в конце трейса добавьте

Astraport 26.04.2011 01:20

Цитата:

Интересно.. А если поменять местами строки:
результат не изменится?
Не изменится.
Проблему решил более сложной конструкцией с TIMER_COMPLITE, но сам по себе факт вопиющий.

andrew911 26.04.2011 01:28

timer.stop() достаточно.

Код у вас странный или приведите его полностью.
Код AS3:

myTimer.start();
myTimer.addEventListener(TimerEvent.TIMER, myStatus);

где находится этот код?

У меня, кстати, отработал один раз.

Astraport 26.04.2011 01:37

Цитата:

где находится этот код?
Ну пусть в init() который запускается при старте приложения.
В флексе, где я пишу, creationComplite = "init()"

Не могу привести весь код т. к. там 1500 строк. Естественно выдрал только нужное, но будьте уверены, что ничего не забыл.

Bgg 26.04.2011 01:39

Где-то косяк в ваших 1500. Таймер останавливается методом stop.

andrew911 26.04.2011 01:44

Цитата:

Сообщение от Astraport (Сообщение 992134)
Естественно выдрал только нужное, но будьте уверены, что ничего не забыл.

Компилировали полученный код?
Должно останавливаться.

Возможно, где-то в myStatus вы запускаете его заново.

bav 26.04.2011 01:50

У конструктора существует второй параметр, возможно, стоит им воспользоваться.
Цитата:

public function Timer(delay:Number, repeatCount:int = 0)
repeatCount:int (default = 0) — Определяет количество повторений. Если ноль, таймер повторяет действия бесконечно. Если не равно нулю, таймер запускается указанное количество раз, а затем останавливается.
Объясните, если вас не затруднит, мне вот что: почему типом параметра слушателя TimerEvent'а может быть String? Да, этот код рабочий, но как? Чего я еще не знаю о наследовании или приведении типов?
Цитата:

(TimerEvent --> Event --> Object)

andrew911 26.04.2011 01:59

Object приводится к String. К int и Boolean тоже.
Хотя меня такая запись тоже удивила.

bav 26.04.2011 02:07

Хм, почему тогда подобный код вызывает ошибку?
Код AS3:

var sp:Sprite = new Sprite();
show(sp);
private function show(param:String):void
{
    trace(param);
}

Цитата:

Error: Implicit coercion of a value of type flash.display:Sprite to an unrelated type String.
Цитата:

Sprite --> DisplayObjectContainer --> InteractiveObject --> DisplayObject --> EventDispatcher --> Object


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

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