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

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

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

Регистрация: Mar 2009
Сообщений: 357
По умолчанию как постоянно отслеживать изменение значения переменной в другом классе?

как постоянно отслеживать изменение значения переменной в другом классе?

Старый 16.06.2009, 23:42
bugizavr вне форума Посмотреть профиль Отправить личное сообщение для bugizavr Найти все сообщения от bugizavr
  № 2  
Ответить с цитированием
bugizavr

Регистрация: Jun 2009
Сообщений: 42
читай про get, set методы
а также про диспетчеризацию событий

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

Регистрация: Mar 2009
Сообщений: 357
читал. пока не очень получается. у меня в одном классе есть public static var s:String, которая в определенный момент времени изменяет значение. во втором - private var _msg:String.

во втором классе пишу:
Код AS3:
private function get msg():String
{ 
	return _msg; 
}		
private function set msg(val:String):void 
{
	_msg = FirstClass.s;
}
а вот как это использовать?

Старый 17.06.2009, 00:01
bugizavr вне форума Посмотреть профиль Отправить личное сообщение для bugizavr Найти все сообщения от bugizavr
  № 4  
Ответить с цитированием
bugizavr

Регистрация: Jun 2009
Сообщений: 42
если грубо))

в первом классе должен объявить константу
S_CHANGED:String = "SChanged";

и при изменении s в ПЕРВОМ КЛАССЕ
должен писать

dispatchEvent(new Event(S_CHANGED));

а второй класс должен подписать на это событие
и в лисенере
_msg = e.currentTarget.s;

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

Регистрация: Mar 2009
Сообщений: 357
а как выполнить определенные действия лишь когда s примет значение? т.е. как постоянно отслеживать значение переменной в функции? к примеру, после завершения определенного дествия у меня запускается функция. как сделать, чтобы после изменения переменной выполнились описанные в функции действия? если я пытаюсь при отрицательном действии опять запустить эту функцию проверки бысторо наступает переполнение стека.

Старый 17.06.2009, 00:33
bugizavr вне форума Посмотреть профиль Отправить личное сообщение для bugizavr Найти все сообщения от bugizavr
  № 6  
Ответить с цитированием
bugizavr

Регистрация: Jun 2009
Сообщений: 42
ну делаешь во втором классе объявление ЭС с таким именем _s

и в нём же пишешь

private function set s(val:String):void
{
_s = val;
dispatchEvent(new Event(S_CHANGED));
}

Старый 17.06.2009, 00:46
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
для статического свойства функцию вещания придется переложить на статический же диспатчер:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Test extends Sprite 
	{
		public function Test():void 
		{
			//подписываемся 
			Class1.addEventListener(Event.CHANGE, watchS);
			//меняем/смотрим трейс
			Class1.s = "value";
			Class1.s = "new value";
		}
 
		private function watchS(evnt:Event):void 
		{
			trace("Class1.s changed to " + Class1.s);
		}
 
	}
 
}
Код AS3:
package  
{
	import flash.events.*;
 
	public class Class1 
	{
		private static var _s:String="";
		private static var _dispatcher:EventDispatcher = new EventDispatcher();
 
 
		static public function addEventListener (type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false) : void
		{
			_dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
		}
 
		static public function get s():String { return _s; }
		static public function set s(value:String):void 
		{
			if (_s == value) return;
			_s = value;
			_dispatcher.dispatchEvent(new Event(Event.CHANGE));
		}
	}
}
upd: добавил проверку (_s == value), чтоб не слать холостых событий


Последний раз редактировалось silin; 17.06.2009 в 00:56.
Старый 17.06.2009, 00:49
loover вне форума Посмотреть профиль Отправить личное сообщение для loover Найти все сообщения от loover
  № 8  
Ответить с цитированием
loover
 
Аватар для loover

Регистрация: Mar 2009
Сообщений: 357
что такое "ЭС"?

а не проще ли при отрицательном ответе просто запускать таймер, который будет запускать функцию с проверкой до получения нужного результата. и обойтись без геттера/сеттера. или это нубский подход?

Старый 17.06.2009, 00:58
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 9  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
Цитата:
Сообщение от loover Посмотреть сообщение
что такое "ЭС"?

а не проще ли при отрицательном ответе просто запускать таймер, который будет запускать функцию с проверкой до получения нужного результата. и обойтись без геттера/сеттера. или это нубский подход?
make me unsee it...
даже нубы думаю должны понимать что это не подход впринципе, когда есть перкрасный способ реализовать то, что вам нужно через события.

Старый 17.06.2009, 00:59
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
с сеттером не будет ведь никаких отрицательных результатов, ты всегда знаешь изменилось ли значение, только надо добавить проверку, можно и более какую хитрую, если надо канеш

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

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

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


 


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


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