![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 357
|
как постоянно отслеживать изменение значения переменной в другом классе?
|
|
|||||
|
Регистрация: Jun 2009
Сообщений: 42
|
читай про get, set методы
а также про диспетчеризацию событий |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 357
|
читал. пока не очень получается. у меня в одном классе есть public static var s:String, которая в определенный момент времени изменяет значение. во втором - private var _msg:String.
во втором классе пишу: а вот как это использовать? |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 42
|
если грубо))
в первом классе должен объявить константу S_CHANGED:String = "SChanged"; и при изменении s в ПЕРВОМ КЛАССЕ должен писать dispatchEvent(new Event(S_CHANGED)); а второй класс должен подписать на это событие и в лисенере _msg = e.currentTarget.s; |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 357
|
а как выполнить определенные действия лишь когда s примет значение? т.е. как постоянно отслеживать значение переменной в функции? к примеру, после завершения определенного дествия у меня запускается функция. как сделать, чтобы после изменения переменной выполнились описанные в функции действия? если я пытаюсь при отрицательном действии опять запустить эту функцию проверки бысторо наступает переполнение стека.
|
|
|||||
|
Регистрация: Jun 2009
Сообщений: 42
|
ну делаешь во втором классе объявление ЭС с таким именем _s
и в нём же пишешь private function set s(val:String):void { _s = val; dispatchEvent(new Event(S_CHANGED)); } |
|
|||||
|
для статического свойства функцию вещания придется переложить на статический же диспатчер:
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); } } } 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)); } } } Последний раз редактировалось silin; 17.06.2009 в 00:56. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 357
|
что такое "ЭС"?
а не проще ли при отрицательном ответе просто запускать таймер, который будет запускать функцию с проверкой до получения нужного результата. и обойтись без геттера/сеттера. или это нубский подход? |
|
|||||
|
Цитата:
даже нубы думаю должны понимать что это не подход впринципе, когда есть перкрасный способ реализовать то, что вам нужно через события. |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|