Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3-我可以使用addEventListener检测变量值的变化吗?_Actionscript 3_Addeventlistener - Fatal编程技术网

Actionscript 3 AS3-我可以使用addEventListener检测变量值的变化吗?

Actionscript 3 AS3-我可以使用addEventListener检测变量值的变化吗?,actionscript-3,addeventlistener,Actionscript 3,Addeventlistener,是否可以使用EventListener侦听变量并检测该变量的值何时更改?谢谢。您过去可以使用Object.watch在AS2中执行类似的操作。我没有看到直接的等价物,但它似乎会为任何可绑定的变量提供类似的功能 我不知道如何在AS3中对不可绑定的变量执行此操作,但是如果您想要查看的变量是可绑定的(或者如果您可以将其修改为可二进制),那么ChangeWatcher可能会为您提供所需的内容。如果您将其全部打包到一个类中,这是非常容易做到的。我们将使用getter/setter方法。每当调用setter

是否可以使用EventListener侦听变量并检测该变量的值何时更改?谢谢。

您过去可以使用Object.watch在AS2中执行类似的操作。我没有看到直接的等价物,但它似乎会为任何可绑定的变量提供类似的功能


我不知道如何在AS3中对不可绑定的变量执行此操作,但是如果您想要查看的变量是可绑定的(或者如果您可以将其修改为可二进制),那么ChangeWatcher可能会为您提供所需的内容。

如果您将其全部打包到一个类中,这是非常容易做到的。我们将使用getter/setter方法。每当调用setter方法时,setter方法都将分派和事件

(注意:setter和getter被视为属性)。您只需指定一个值,而不是调用一个方法(例如
someVar=5
而不是
someVar(5);
即使setter/getter是函数/方法,它们也被视为属性

//The document class
package
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.EventDispatcher;

  public Class TestDocClass extends Sprite
  {
    private var _model:Model;

    public function TestDocClass():void
    {
      _model = new Model();
      _model.addEventListener(Model.VALUE_CHANGED, onModelChanged);
    }

    private function onModelChanged(e:Event):void
    {
      trace('The value changed');
    }
  }
}

//The model that holds the data (variables, etc) and dispatches events. Save in same folder as DOC Class;
package
{
  import flash.events.Event;
  import flash.events.EventDispatcher;

  public class Model extends EventDispatcher
  {
    public static const VALUE_CHANGED:String = 'value_changed';
    private var _someVar:someVarType;

    public function Model():void
    {
      trace('The model was instantiated.');
    }

    public function set someVariable(newVal:someVarType):void
    {
      _someVar = newVal;
      this.dispatchEvent(new Event(Model.VALUE_CHANGED));
    }
  }
}

@BrianHodge:你实际上是如何使用你的例子的?你如何调用set函数?你如何引用它?在哪里传递要更改的变量

比如说,如果我想通过单击按钮来更改包装的变量。 我必须承认,我尝试了其他一些代码和示例(getter/setter)类型,有
dispatchEvent
或没有,但我无法克服!但您的示例似乎正是我需要的,只是无法使其工作

当我将函数设置为document类时,我得到了模型实例化的
,仅此而已

我终于发现,对于像我这样的人来说,他们在这件事上浪费时间!
在我的例子中,
\u someVar
变量必须以
字符串
的形式输入数据(与
fornewVal
的情况相同)

OnceTestDocClass
被设置为您的文档类;您可以引用如下实例化的模型:

_model.someVariable="new stuff";  
_model.someVariable("new stuff");  
我试图像这样更改值:

_model.someVariable="new stuff";  
_model.someVariable("new stuff");  
您可以在
模型
类中添加一些跟踪操作,以便在输出面板中有一个清晰的演示:

package
{
  import flash.events.Event;
  import flash.events.EventDispatcher;

  public class Model extends EventDispatcher
  {
    public static const VALUE_CHANGED:String = 'value_changed';
    private var _someVar:String = "default";

    public function Model():void
    {
      trace('The model was instantiated.');
    }

    public function set someVariable(newVal:String):void
    {
      trace ("before " + _someVar);
      _someVar = newVal;
      trace ("after " + _someVar);
      this.dispatchEvent(new Event(Model.VALUE_CHANGED));
    }
  }
}

这并不多,但这些东西可能会花费一些人大量的时间=)

是的,我希望看到一个这样的工作示例。我正在尝试合并一个命中测试。当用户在一个项目上时,有一个ENTER\u FRAME侦听器注册一个常量“hit”值,但当它们关闭时,侦听器会更改为注册一个常量“off”值。该场景如何应用于您的模型?