Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.06.2013, 17:19
alexqw вне форума Посмотреть профиль Отправить личное сообщение для alexqw Найти все сообщения от alexqw
  № 1  
Ответить с цитированием
alexqw

Регистрация: Jun 2013
Сообщений: 33
По умолчанию Проблема при создании таймера

Добрый день.
Помогите решить проблему.
При нажатии на кнопку запускается функция в которой создаётся таймер. После завершения таймера если условие (srTime<x) выполняется то функция запускается ещё раз. Так же эта функция вызывается много раз если тыкать по кнопке. В этом собственно и проблема. Создаётся много таймеров и на экране последняя секунда мерцает. Пробовал всякими if(myTimer.running), myTimer.reset(), но всё равно последняя секунда на экране скачет плюс минус секунда.



Код AS3:
private function newTimer (){ 
				if(srTime<x) {
				var nTime = com.adobe.serialization.json.JSON.decode(time.data); //сюда приходят секунды оставшиеся до 5 минут				
				var kolSek = 300-nTime.time_for_as; 	
 
 
				var myTimer:Timer = new Timer (1000, kolSek);				
				myTimer.addEventListener(TimerEvent.TIMER, onTimeEner); //секундомер
				myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timeOK); 
					myTimer.start();
 
				function onTimeEner (e:TimerEvent) {
 
					kolSek--;	
						if (kolSek>0){
						var sek:int=kolSek%60;
						var min:int=kolSek/60;						
						pan.tim_energ.text=min+":"+sek;
					}
				}			
			}				
		}
		private function timeOK(e:TimerEvent) { //по завершению таймера прибавляется 1  и запускается заново
			srTime+=1;					
			pan.text=String(srEnerg);
			newTimer();
		}
	}

Старый 26.06.2013, 17:31
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 2  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
А какая задача изначально решается?
Вам нужно много таймеров?

И функцию в функции кстати зря делаете

Старый 26.06.2013, 17:35
alexqw вне форума Посмотреть профиль Отправить личное сообщение для alexqw Найти все сообщения от alexqw
  № 3  
Ответить с цитированием
alexqw

Регистрация: Jun 2013
Сообщений: 33
нужен один таймер. по его завершению добавляется +1 к счётчику до определённого значения.
Создаётся он при клике по кнопке. Если один раз нажать то всё хорошо. А если много раз то глючит.
а функцию в функции делаю что бы переменные в глобальную область не выносить.

Добавлено через 2 минуты
хороший пример: таймер восстановления энергии в социальных играх.
когда энергия максимальна таймер выключен, если нажать кнопку какого-либо действия то энергия уменьшается а таймер включается. И вот если на кнопку выполнения много раз нажать то таймер теоретически много раз пересоздастся.

Старый 27.06.2013, 09:11
bifidokk вне форума Посмотреть профиль Отправить личное сообщение для bifidokk Найти все сообщения от bifidokk
  № 4  
Ответить с цитированием
bifidokk
 
Аватар для bifidokk

Регистрация: Jan 2011
Сообщений: 200
эмм. создайте один таймер в начале класса, зачем создавать кучу локальных? также где-то в инициализации подпишитесь на слушатели, а в методе newTimer проверяйте, если таймер еще запущен, то ничего не происходит. если не запущен, но запускаем.

Старый 27.06.2013, 10:18
alexqw вне форума Посмотреть профиль Отправить личное сообщение для alexqw Найти все сообщения от alexqw
  № 5  
Ответить с цитированием
alexqw

Регистрация: Jun 2013
Сообщений: 33
в начале класса не получается. Количество секунд (kolSek) не определено будет. Или я что-то не правильно понял?

Добавлено через 2 минуты
а, вроде бы понял. На кнопку другую функцию повесить с if(myTimer.running).

Добавлено через 1 час 20 минут
Нет. Всё таки так не получится.
При первом запуске таймер может создаться не с пятиминутным интервалом а с любым, например минута и 30 секунд. А при отработке он должен запустится с выдержкой 5 минут.
Можно первый удалить как-нибудь?


Последний раз редактировалось alexqw; 27.06.2013 в 11:39.
Старый 28.06.2013, 09:10
bifidokk вне форума Посмотреть профиль Отправить личное сообщение для bifidokk Найти все сообщения от bifidokk
  № 6  
Ответить с цитированием
bifidokk
 
Аватар для bifidokk

Регистрация: Jan 2011
Сообщений: 200
что мешает сделать так:

Код AS3:
// где-то в начал класса
var myTimer:Timer = new Timer (1000);
 
// в обработчике клика
if(myTimer.running)  return;
 
var nTime = com.adobe.serialization.json.JSON.decode(time.data); 
var kolSek = 300-nTime.time_for_as; 
 
myTimer.repeatCount = kolSek;	
myTimer.start();

Старый 28.06.2013, 16:09
alexqw вне форума Посмотреть профиль Отправить личное сообщение для alexqw Найти все сообщения от alexqw
  № 7  
Ответить с цитированием
alexqw

Регистрация: Jun 2013
Сообщений: 33
Да. Спасибо. Примерно так и сделал.
Только не сразу догадался repeatCount использовать, по этому у меня 2 таймера. один не с 5 минут, второй с пяти)
В следующий раз через repeatCount конечно буду делать.
Спасибо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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