Форум 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=159903)

letsrock85 06.07.2011 18:56

Отследить изменение значения переменной
 
Добрый день! Подскажите, будьте добры - как замутить отслеживание изменения значения переменной в AS3. Идеально было бы через метод addEventListener, но не нашел в справке ниче такого, типа value.Changed :).
Мне это необходимо для создания счета игрока и при его изменении записывать его в базу данных. Жду вашей помощиииии!!!

alatar 06.07.2011 19:18

Код AS3:

private var _someValue:int;
public function get someValue():int
{
  return _someValue;
}
public function set someValue(value:int):void
{
    if (_someValue == value)
      return;
    _someValue = value;
    dispatchEvent(/*событие об изменении*/);
}


letsrock85 06.07.2011 20:01

Чесно - для меня это темный вариант. ПОтому что он ориентирован на работу с классами, а мне они пока не нужны. вот мой код который не работает
Код AS3:

  import flash.events.Event; 
  import flash.events.EventDispatcher;
  import flash.events.MouseEvent;
 
 var _someValue:int;
 function get someValue():int
{
  return _someValue;
}
 function set someValue(value:int):void
{
    if (_someValue == value)
      return;
    _someValue = value;
    dispatchEvent(addone);
}
btn1.addEventListener(MouseEvent.CLICK, someValue);
function addone (e:MouseEvent):void {
        //добавляю значение переменной в базу
}


carrotoff 06.07.2011 23:41

Очень странная задача. Не буду спрашивать зачем так надо.

Код AS3:

function set someValue(value:int):void{
  if (_someValue == value){
      return;
  }
    _someValue = value;
    dispatchEvent(new Event("ValueChanged"));
}
 
...
 
btn1.addEventListener("ValueChanged", _handler);
 
private function _handler(e:Event):void{
  trace("Значение переменной изменено");
}

В принципе, alatar вам именно это и расписал

Котяра 07.07.2011 00:28

ещё есть страшное слово биндинг

letsrock85 07.07.2011 05:46

Спасибо за старания помочь, но у меня не вышло. я так понял тут принцип сравнивания значений по событию и если оно не совпадает - выполняем функцию(_handler)... снова привожу код:
Код AS3:

  import flash.events.Event; 
  import flash.events.EventDispatcher;
  import flash.events.MouseEvent;
 
 var _someValue:int;// Надо объявить иначе еррор
 var myper = 0;//Моя переменная для проверки
function set someValue(value:int):void{
  if (_someValue == value){
      return;
  }
    _someValue = value;
    dispatchEvent(new Event("ValueChanged"));
}
myper.addEventListener("ValueChanged", _handler);//я так понял что на нее и надо вешать прослушиватель но не выходит
//пишет Valuse is not a function - а если вешаю на кнопку то ошибки нет но не работает
 function _handler(e:Event):void{ //private убрал
  trace("Значение переменной изменено");
}
btn1.addEventListener(MouseEvent.CLICK, addone)// по нажатии кнопки выпонлить
function addone (e:MouseEvent):void {
        myper++; //изменяю число
}

К слову, я думал решить задачу по пополнению счета игрока таким макаром. Мол как только счет изменился, вставляем в базу и выводим. Но может есть более верное и простое решение? Например: Писать сразу в базу и если записало(result succes) то тут же получать из нее. Но и тут я думаю придется мудрить с функциями.???

Mur4ik 07.07.2011 10:44

Цитата:

Сообщение от letsrock85 (Сообщение 1009289)
Мне это необходимо для создания счета игрока и при его изменении записывать его в базу данных. Жду вашей помощиииии!!!

А вдруг там мало ли чего и в базу данные не запишутся? А в приложении уже значение поменяется и так дальше как снежный ком посыпятся расхождения во всем и во вся ...

Тут нужно немного иначе, сначала пишем в базу, возвращаем результат операции, если успешно - меняем в приложении и оповещаем всех кому это интересно или нужно знать.

Если чёт там не сложилось с записью, то и в приложении нет смысла менять.
А уж со счетами юзеров точно не стоит шутить :)


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

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