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

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

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

Регистрация: Apr 2010
Сообщений: 137
По умолчанию Аргументы функции при запуске таймера

В общем есть таймер timerForParts, после определенного времени выполняется функция deletePart.
Чтобы понятнее было, есть например у меня переменная temp. Я хочу чтобы эта переменная передалась той функции, которая выполнится после определенного времени пройденного таймером. Если кто все равно не понял, то вот набросал код
Код AS3:
private function some():void { //какая-то функция в классе, в которой я включаю таймер свой
   var temp:int = 0;
   var timerForParts:Timer = new Timer(5000, 1);
   timerForParts.addEventListener(TimerEvent.TIMER, deletePart);
   if (что-то) {temp = 1;} else {temp = 2;}
   timerForParts.start();
 
   function deletePart():void {
	//вот тут я хочу использовать переменную temp. Просто напрямую написать temp не получится, так как функция some успевает ещё несколько раз выполнится и изменить temp до того момента, как включится таймер.
   }

Старый 04.01.2013, 06:30
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 2  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
Объявите переменную на уровне класса, а не метода. И не используйте вложенные функции.

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

Регистрация: Jan 2012
Адрес: (0;0;0) относительно меня
Сообщений: 82
Отправить сообщение для am_devcorp с помощью Skype™
Кстати, в приведенном коде если внутри deletePart обратиться к temp, то все получится как хочет автор. Другое дело, компилятор ругнется на количество параметров означенной функции.

Добавлено через 3 минуты
И да- хоть оно и будет работать, вложенные функции- это в 99,9% плохая идея.
__________________
cats are supreme beings

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,875
Записей в блоге: 7
Цитата:
Сообщение от am_devcorp Посмотреть сообщение
И да- хоть оно и будет работать, вложенные функции- это в 99,9% плохая идея.
На 100%
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
В Старлинге сам основатель Даниэль вложенные функции использует сплошь и рядом и в примерах и в советах на форуме. Даже не знаю как к этому относиться.
__________________
In Code We Trust

Старый 04.01.2013, 14:05
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 6  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Но только не путайте TIMER_COMPLETE и TIMER. Первая срабатывает на завершение работы таймера, а вторая на каждую итерацию. Учитывая что у вас количество повторений равно единице, есть резон слушать просто TIMER_COMPLETE

Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class SomeClass {
		private var _timer:Timer = new Timer(5000, 1);
		private var _temp:int = 0; 
 
		public function SomeClass():void {
			_timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
			_timer.start();
 
			if (Math.random() > 0.5)
				_temp = 1;
			else
				_temp = 2;
		}
 
		private function timerCompleteHandler(e:TimerEvent):void {
			_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
 
			trace(_temp);
		}
	}
}
__________________
adobe AS3 manual

Старый 04.01.2013, 15:48
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,875
Записей в блоге: 7
Цитата:
Сообщение от Astraport Посмотреть сообщение
В Старлинге сам основатель Даниэль вложенные функции использует сплошь и рядом и в примерах и в советах на форуме. Даже не знаю как к этому относиться.
Как к тому, что все ошибаются.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 04.01.2013, 16:13
TurboDizel вне форума Посмотреть профиль Отправить личное сообщение для TurboDizel Найти все сообщения от TurboDizel
  № 8  
Ответить с цитированием
TurboDizel
 
Аватар для TurboDizel

Регистрация: Apr 2010
Сообщений: 137
Так если я в функции deletePart напишу напрямую temp, он же возьмет значение, которое есть в момент вызова функции deletePart. А мне нужно значение temp именно с того раза, когда я запустил таймер. Функция some несколько раз ещё может вызваться пока идет таймер.

Старый 04.01.2013, 17:00
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 9  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
по сути вам нужен слушатель с параметром
http://www.flasher.ru/forum/blog.php?b=239
http://www.flasher.ru/forum/blog.php?b=291

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Просто наследовать таймер, со своими аргументами

Код AS3:
	public class TimerPayload extends Timer
	{
		private var _payload:int;
 
		public function TimerPayload(delay:int, repeatCount:int, payload:int) {
			super(delay, repeatCount);
 
			_payload = payload;
		}
 
		public function get payload():int  {
			return _payload;
		}
	}
И потом использовать так:

Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class SomeClass {
		private var _timer:TimerPayload = new TimerPayload(5000, 1, 5); // Устанавливаем значение
 
		public function SomeClass() {
			_timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
			_timer.start();
		}
 
		private function timerCompleteHandler(e:TimerEvent):void {
			_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
 
			trace(_timer.payload); // Получаем значение
		}
	}
}
__________________
adobe AS3 manual


Последний раз редактировалось strangedk; 04.01.2013 в 19:25.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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