Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Событие изменения значения переменной (http://www.flasher.ru/forum/showthread.php?t=174746)

ЗлОй ПрОграММер 01.02.2012 17:26

Событие изменения значения переменной
 
Можно каким нибудь образом создать событие отлавливающее изменение значения переменной, допустим присвоили переменной значение и обработчик этого события выполняет код trace("переменная изменилась");

iNils 01.02.2012 17:28

С переменными работать только через get/set. А внутри что угодно можно делать.

Genzo 01.02.2012 17:42

Или использовать Bindable (http://www.flasher.ru/forum/showthread.php?t=174636)

TanaTiX 01.02.2012 17:43

Genzo, или не использовать. Описано там же ;)

ЗлОй ПрОграММер 01.02.2012 17:48

спасиб, ща почитаю

Добавлено через 15 минут
iNils, ваш вариант не подходит, нет желания работать с set и get, другой способ нужен)
насчёт статьи, прочитал http://blog.diestro.ru/binding-v-actionscript-1/#how
переменная(text) за изменением которой нужно следить находиться в классе который обязательно должен наследоваться от EventDispatcher а если у меня два экземпляра классов которые наследуются от sprite, и в одном нужно следить за изменением свойств другого, тогда как быть ?

можно канешн подписать экземпляр на событие ENTER_FRAME и в обработчике отслеживать изменение переменной, но this isn't good. нужно чтобы событие возникало ток при изменении переменной

amesqit 01.02.2012 19:19

чем вам сетеры/гетеры не нравятся? В них легко сможете засунуть события, Sprite наследник EventDispatcher. Через ENTER_FRAME гораздо более кривая реализация. Если только одному надо следить за изменением другого, то можно следящему передать ссылку на изменяемого, если оба следят друг за другом, функции слежения и изменения я обычно перекладываю на третий класс, про который изменяемые ничего не знают, как и про существование друг-друга, меньше размазаной логики.

ЗлОй ПрОграММер 01.02.2012 22:27

если не ошибаюсь если использовать сетеры и гетеры к переменным придётся по другому обращаться, или я путаю ?

TanaTiX 01.02.2012 22:58

путаешь

ЗлОй ПрОграММер 01.02.2012 23:48

ну вот накидал
Код AS3:

private var sgName: String = new String("sgName");
 
public function get sgfName(): String
{
        trace("getSgfName");
        return this.sgName;       
}
 
public function set sgfName(value: String): void
{
        trace("setSgfName");
        this.sgName = value;       
}

всё равно же трейс выведет setSgfName только в том случае если
Код AS3:

sgfName = "sgNameNew";

а не
Код AS3:

sgName = "sgNameNew";

но и это впринипе меня устроит, спасибо за подсказку

TanaTiX 02.02.2012 00:05

Создание геттера/сеттера
Код AS3:

private var _param:String = "default value";
public function get param():String{
  return _param;
}
public function set param(value:String):void{
  _paran = value;
}

Обращение к указанному выше свойству через геттер/сеттер
Код AS3:

var item:SomeClass = new SomeClass();
item.param = "new value";
trace(item.param);

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

ЗлОй ПрОграММер 02.02.2012 00:40

так отличаются) sgfName и sgName
да и вы сделали тож самое что и я) ну практически
ладно спасибо за помощь, думаю на этом тема завершается)


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

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