【问题标题】:counting the number of instances of a particular class on stage in as3在 as3 中计算舞台上特定类的实例数
【发布时间】:2012-08-10 17:25:41
【问题描述】:

有人知道如何获取当前舞台上特定类(在我的情况下为 Ball.as)的实例数吗?

注意:我想要一个不包括使用 numChildren 然后循环遍历所有子级的解决方案,因为我想要每个 enterFrame 的 Balls 的数量,这样循环可能只会让我的代码更重。

有什么建议吗?

【问题讨论】:

    标签: actionscript-3 class instance


    【解决方案1】:

    您可以在类中使用静态变量来跟踪,但这意味着您必须始终正确跟踪该变量,否则可能会导致计数错误。

    public static var count:int = 0;
    
    
    public Ball() {
       addEventListener(Event.ADDED, onAdded);   
       addEventListener(Event.REMOVED, onRemoved);
    }
    
    private function onAdded(event:Event):void {
       removeEventListener(Event.ADDED, onAddeed);
       Ball.count++;
    }
    
    private function onRemoved(event:Event):void{
       removeEventListener(Event.REMOVED, onRemoved);
       Ball.count--;
    }
    

    然后在您想计算它们时:

    trace(Ball.count);
    

    【讨论】:

    • 啊,这是有史以来最好的解决方案。对于所有静态的东西,我确实有一个 Game.as 类,但从未想过这一点。但怎么可能算错呢?
    • @ZeeshanAhmad 抱歉,我的意思是您必须在添加和删除球时正确更新变量 - 我发布的代码应该正确执行此操作,因为它会侦听 ADDED 和 REMOVED 事件。
    【解决方案2】:

    a) 数一数

    var balls:uint = 0;
    for(var i:uint=0,l:uint = numChildren; i<l;i++)
      if(getChildAt(i) is Ball) balls++;
    

    b) 跟踪他们

    var balls:uint = 0;
    
    function addBall():DisplayObject {
       balls++;
       return addChild(new Ball());
    }
    
    function removeBall(ball:Ball):DisplayObject {
       balls--;
       return removeChild(ball);
    }
    

    c) 隔离它们

    var ballContainer:Sprite = new Sprite();
    addChild(ballContainer);
    
    ...
    
    ballContainer.addChild(new Ball());
    
    var balls:uint = ballContainer.numChildren; 
    

    【讨论】:

    • 他明确表示他不希望解决方案涉及循环 numChildren,因此 (a) 不是一个好的解决方案。
    【解决方案3】:

    我认为没有办法绕过循环。

    当我有一个任意大小的 Actionscript 项目时,我将创建一个静态管理器类来处理所有应用程序范围的变量。您可以在其中创建一个数组,并在创建新的球实例时从中添加/删除。

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多