【问题标题】:ActionScript 3.0 class extendsActionScript 3.0 类扩展
【发布时间】:2015-01-26 16:21:01
【问题描述】:

场景:

我有类 characterObject 和扩展的 n 类(猫、狗、鸟、n...)

public class characterObject
{
    public static var totalCounter:int;
}
public class cat extends characterObject 
public class dog extends characterObject 
public class bird extends characterObject

扩展类是否可以在有或没有事件的情况下监听主类中静态变量(例如totalCounter)的变化?

【问题讨论】:

  • 你的问题不是很清楚,你想做什么?如果可以,请提供一些示例代码
  • @CyanAngel 好的,对不起。我有扩展类 characterObj 的 cat、dog、bird(和其他......)类。 characterObj 中的静态变量totalCounter 由cat、dog、bird 类中的函数增加或减少... 我可以同时从cat、dog 和bird 中监听totalCounter 的变化值吗?所以大家都知道改变的价值吗?

标签: actionscript-3


【解决方案1】:

这可以通过结合使用 getter/setter 函数和事件来实现。

在 actionscript 中,Getter 和 Setter 是可以像变量一样访问的函数,使您能够在变量更改时执行函数。

public class characterObject
{
    private static var _totalCounter:int;
    protected static var internalDispatcher:EventDispatcher = new EventDispatcher();
    public static function get totalCounter():int
    {
        return _totalCounter;
    }
    public static function set totalCounter(value:int):void
    {
        _totalCounter = value;
        var event:Event = new Event("totalCounterChanged");
        internalDispatcher.dispatchEvent(event);
    }
}

如您所见,我们有一个名为internalDispatcherprotected static 事件分派器,只有扩展了characterObject 类,我们才能监听来自该对象的事件。通过将真正的 totalCounter 隐藏在 getter/setter 后面,我们可以在任何事情改变它的值时调度一个事件。

然后我们可以在扩展类中监听这个事件:

public class cat extends characterObject
{
    public function cat()
    {
        super();
        internalDispatcher.addEventListener("totalCounterChanged",totalChangedHandler);
    }
    public function totalChangedHandler(event:Event):void
    {
        //Your code here;
    }
}

根据您的要求,最好让您的事件处理程序是静态的,以减少多次执行相同的代码而不改变输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2012-04-07
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多