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

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

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

Регистрация: Aug 2012
Сообщений: 297
По умолчанию Отсчёт времени в Timer

Здравствуйте, дорогие друзья. Представьте ситуацию: вы создали таймер, установили время, через которое событие будет запущено и написали старт. Время пошло.
Как узнать время, которое идёт? Допустим: Через N секунд будет запущено событие.

Старый 19.08.2012, 21:57
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 2  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
можно создать переменную(счётчик) которая будет увеличиваться на единицу каждый раз как приходит событие от таймера и когда счётчик будет равен заданному значению запустить другое событие

Старый 19.08.2012, 22:18
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 3  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от Wadimir Посмотреть сообщение
можно создать переменную(счётчик) которая будет увеличиваться на единицу каждый раз как приходит событие от таймера и когда счётчик будет равен заданному значению запустить другое событие
Правильно ли я понимаю, что вы имели в виду написать именно так, как я написал ниже?
Код AS1/AS2:
package SRCa
{
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
 
	public class ForTImer extends MovieClip
	{
		public var InstallSomeTime:int = 10;
		public var ObjectTimer:Timer = new Timer(1000,InstallSomeTime);
		public var NumberIsTimer:Number = 0;
		public function ForTImer()
		{
			ObjectTimer.addEventListener(TimerEvent.TIMER, EventTimer);
			ObjectTimer.start();
		}
		public function EventTimer(Event:TimerEvent):void
		{
			trace("Количество повторов:",Event.target.currentCount);
 
			if(Event.target.currentCount == InstallSomeTime)
			{
				trace("Миг настигнут!");
			}
		}
	}
}

Старый 19.08.2012, 22:22
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 4  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Код AS3:
var lastMsec : Number = (timer.totalCounts - timer.currentCount)*timer.delay;
Как-то так.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 19.08.2012, 23:12
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
если количество тиков установлено, в конце таймер выдаст TimerEvent.TIMER_COMPLETE
__________________
Reality.getBounds(this);

Старый 21.08.2012, 18:32
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 6  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от ChuwY Посмотреть сообщение
Код AS3:
var lastMsec : Number = (timer.totalCounts - timer.currentCount)*timer.delay;
Как-то так.
А можете продемонстрировать пример? У меня не получается в мозгу это спаять с таймером.

Старый 21.08.2012, 20:24
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Кого тут спаивать? timer это Ваш Event.target, все остальное это его свойства.
У Вас правда компилится код, в котором переменная названа как импортированный Класс?
Может, стоит писать по конвенции? Классы с большой, члены классов — с маленькой?
__________________
Reality.getBounds(this);

Старый 21.08.2012, 20:28
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 8  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class TimTest extends Sprite
	{
		private static const DELAY : Number = 100;
		private static const REPEAT_COUNTS : uint = 100;
		private var _timer : Timer = new Timer(DELAY, REPEAT_COUNTS);
		public function TimTest()
		{
			_timer.addEventListener(TimerEvent.TIMER, onTimer);
			_timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
			_timer.start();
		}
 
		//*** handlers ***//
		private function onTimer(event : TimerEvent):void
		{
			var lastMsec : Number = (_timer.repeatCount - _timer.currentCount)*_timer.delay;
			trace("До конца отсчета осталось " + lastMsec + " миллисекунд");
		}
 
		private function onTimerComplete(event : TimerEvent):void
		{
			trace('Таймер завершил работу');
		}
	}
}
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 22.08.2012, 01:07
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
А я подумал, что речь про вот такое шла. Может и ошибаюсь
Мышкой нужно потыкать.
Код AS3:
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
 
	public class Main extends Sprite
	{
		public function Main()
		{
			if (stage)
				stage.addEventListener(MouseEvent.CLICK, _onMClick);
 
			_timer = new Timer(0, 1);
			_timer.addEventListener(TimerEvent.TIMER_COMPLETE, _onTimerComplete);
		}
 
 
		private var _timer : Timer;
		private var _timerStartTime : int = -1;
 
 
		private function _getTimerTime() : int
		{
			if (_timer.running)
				return (getTimer() - _timerStartTime);
			return -1;
		}
 
		private function _restartTimer() : void
		{
			if (_timer.running)
				_timer.reset();
 
			_timer.delay = 100 + 1000 * Math.random();
			_timer.start();
			_timerStartTime = getTimer();
 
			this.addEventListener(Event.ENTER_FRAME, _printTimerProgressEveryFrame);
 
			trace("=== TIMER STARTED ===");
		}
 
		private function _onMClick( e:MouseEvent ) : void
		{
			if (_timer.running)
				trace(_getTimerTime());
			else
				_restartTimer();
		}
 
		private function _printTimerProgressEveryFrame( e:Event ) : void
		{
			var t:int = _getTimerTime();
			var p:Number = 100.0 * Math.min(1.0, (t / _timer.delay));
			p = Math.round(10 * p) / 10;
 
			trace("Progress: " + p.toFixed(1) + " %     " + t + " of " +  int(_timer.delay) + " ms");
		}
 
		private function _onTimerComplete( e:TimerEvent ) : void
		{
			trace("=== TIMER COMPLETE ===");
 
			this.removeEventListener(Event.ENTER_FRAME, _printTimerProgressEveryFrame);
		}
	}
}
Код:
=== TIMER STARTED ===
Progress: 2.2 %     13 of 582 ms
Progress: 7.0 %     41 of 582 ms
Progress: 12.9 %     75 of 582 ms
Progress: 18.7 %     109 of 582 ms
Progress: 24.2 %     141 of 582 ms
Progress: 30.1 %     175 of 582 ms
Progress: 36.1 %     210 of 582 ms
Progress: 41.6 %     242 of 582 ms
Progress: 47.1 %     274 of 582 ms
Progress: 52.9 %     308 of 582 ms
Progress: 58.7 %     342 of 582 ms
Progress: 64.2 %     374 of 582 ms
Progress: 70.1 %     408 of 582 ms
Progress: 75.9 %     442 of 582 ms
Progress: 81.4 %     474 of 582 ms
Progress: 87.4 %     509 of 582 ms
Progress: 92.9 %     541 of 582 ms
Progress: 98.8 %     575 of 582 ms
Progress: 100.0 %     607 of 582 ms
=== TIMER COMPLETE ===
=== TIMER STARTED ===
Progress: 16.8 %     32 of 190 ms
Progress: 34.6 %     66 of 190 ms
Progress: 51.4 %     98 of 190 ms
Progress: 69.2 %     132 of 190 ms
Progress: 87.0 %     166 of 190 ms
Progress: 100.0 %     198 of 190 ms
=== TIMER COMPLETE ===

Старый 22.08.2012, 20:42
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 10  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Кого тут спаивать? timer это Ваш Event.target, все остальное это его свойства.
У Вас правда компилится код, в котором переменная названа как импортированный Класс?
Может, стоит писать по конвенции? Классы с большой, члены классов — с маленькой?
Спасибо за беспокойство, но я считаю себя не таким уверенным человеком (знающим хорошо ActionScript 3), как вы, поэтому и позволил себе спросить. Спасибо ещё раз. Так, случайно пропустил на счёт "У Вас правда компилится код, в котором переменная названа как импортированный Класс?". Можете уточнить? Код компилируется, правда. Вот результат:
Количество повторов: 1
Количество повторов: 2
Количество повторов: 3
Количество повторов: 4
Количество повторов: 5
Количество повторов: 6
Количество повторов: 7
Количество повторов: 8
Количество повторов: 9
Количество повторов: 10
Миг настигнут!


Добавлено через 56 секунд
Цитата:
Сообщение от i.o. Посмотреть сообщение
А я подумал, что речь про вот такое шла. Может и ошибаюсь
Мышкой нужно потыкать.
Код AS3:
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
 
	public class Main extends Sprite
	{
		public function Main()
		{
			if (stage)
				stage.addEventListener(MouseEvent.CLICK, _onMClick);
 
			_timer = new Timer(0, 1);
			_timer.addEventListener(TimerEvent.TIMER_COMPLETE, _onTimerComplete);
		}
 
 
		private var _timer : Timer;
		private var _timerStartTime : int = -1;
 
 
		private function _getTimerTime() : int
		{
			if (_timer.running)
				return (getTimer() - _timerStartTime);
			return -1;
		}
 
		private function _restartTimer() : void
		{
			if (_timer.running)
				_timer.reset();
 
			_timer.delay = 100 + 1000 * Math.random();
			_timer.start();
			_timerStartTime = getTimer();
 
			this.addEventListener(Event.ENTER_FRAME, _printTimerProgressEveryFrame);
 
			trace("=== TIMER STARTED ===");
		}
 
		private function _onMClick( e:MouseEvent ) : void
		{
			if (_timer.running)
				trace(_getTimerTime());
			else
				_restartTimer();
		}
 
		private function _printTimerProgressEveryFrame( e:Event ) : void
		{
			var t:int = _getTimerTime();
			var p:Number = 100.0 * Math.min(1.0, (t / _timer.delay));
			p = Math.round(10 * p) / 10;
 
			trace("Progress: " + p.toFixed(1) + " %     " + t + " of " +  int(_timer.delay) + " ms");
		}
 
		private function _onTimerComplete( e:TimerEvent ) : void
		{
			trace("=== TIMER COMPLETE ===");
 
			this.removeEventListener(Event.ENTER_FRAME, _printTimerProgressEveryFrame);
		}
	}
}
Код:
=== TIMER STARTED ===
Progress: 2.2 %     13 of 582 ms
Progress: 7.0 %     41 of 582 ms
Progress: 12.9 %     75 of 582 ms
Progress: 18.7 %     109 of 582 ms
Progress: 24.2 %     141 of 582 ms
Progress: 30.1 %     175 of 582 ms
Progress: 36.1 %     210 of 582 ms
Progress: 41.6 %     242 of 582 ms
Progress: 47.1 %     274 of 582 ms
Progress: 52.9 %     308 of 582 ms
Progress: 58.7 %     342 of 582 ms
Progress: 64.2 %     374 of 582 ms
Progress: 70.1 %     408 of 582 ms
Progress: 75.9 %     442 of 582 ms
Progress: 81.4 %     474 of 582 ms
Progress: 87.4 %     509 of 582 ms
Progress: 92.9 %     541 of 582 ms
Progress: 98.8 %     575 of 582 ms
Progress: 100.0 %     607 of 582 ms
=== TIMER COMPLETE ===
=== TIMER STARTED ===
Progress: 16.8 %     32 of 190 ms
Progress: 34.6 %     66 of 190 ms
Progress: 51.4 %     98 of 190 ms
Progress: 69.2 %     132 of 190 ms
Progress: 87.0 %     166 of 190 ms
Progress: 100.0 %     198 of 190 ms
=== TIMER COMPLETE ===
Спасибо, сохранил, теперь попробую понять, что да как. Понравилось как вы сделали: "увеличение количества процентов".

Добавлено через 4 минуты
Цитата:
Сообщение от ChuwY Посмотреть сообщение
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class TimTest extends Sprite
	{
		private static const DELAY : Number = 100;
		private static const REPEAT_COUNTS : uint = 100;
		private var _timer : Timer = new Timer(DELAY, REPEAT_COUNTS);
		public function TimTest()
		{
			_timer.addEventListener(TimerEvent.TIMER, onTimer);
			_timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
			_timer.start();
		}
 
		//*** handlers ***//
		private function onTimer(event : TimerEvent):void
		{
			var lastMsec : Number = (_timer.repeatCount - _timer.currentCount)*_timer.delay;
			trace("До конца отсчета осталось " + lastMsec + " миллисекунд");
		}
 
		private function onTimerComplete(event : TimerEvent):void
		{
			trace('Таймер завершил работу');
		}
	}
}
И вам спасибо. Только вопрос: почему именно 'Number = (_timer.repeatCount - _timer.currentCount)*_timer.delay;', находится в переменной lastMsec? Я попробовал реализовать без этой переменной, результат тот же. Может наличие переменной — это пример правильной работы, по конвенции? Если вам будет не сложно, то подкиньте какое-нибудь имя автора, например Мука, где об этом написано. Удачи.

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

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

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


 


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


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