【问题标题】:Creating a new array for eache iteration of the function call. AS3为函数调用的每次迭代创建一个新数组。 AS3
【发布时间】:2011-12-01 03:30:22
【问题描述】:

所以我编写了一个函数,它返回舞台上的对象并将它们放入一个数组中。并且该函数可以正常工作,直到我在多个对象名称上调用该函数,这意味着如果我在根类中,并且我在 object1 上调用此函数可以说它将添加舞台上的所有对象,但是如果我调用它在 object2 上它会抛出一个错误,这是有道理的,我想这意味着它没有将它添加到一个唯一的数组中,但我不知道该怎么做。

创建一个多维数组是个好主意吗?如果是这样,会不会太慢?

这里是功能代码:

public function findObjects(objectName, objLocation, bVisible = false):Array{
    for (var i = 0; i < objLocation.numChildren; i++){
        var nObj=objLocation.getChildAt(i);
        if (nObj is objectName){
            // add to array and make invisible
            obj.push(nObj);
            nObj.visible=bVisible;
        }
    }
    return obj;
}

对此的任何帮助将不胜感激。

【问题讨论】:

  • 如果您遇到错误,请发布确切的错误消息。

标签: arrays actionscript-3 oop function


【解决方案1】:

试试这个:

public function findObjects(type:Class, target:DisplayObjectContainer, bVisible:Boolean=false):Array
{
    var out:Array = [];

    for(var i:int = 0; i<target.numChildren; i++)
    {
        var obj:DisplayObject = target.getChildAt(i);

        if(obj is type)
        {
            out.push(obj);
            obj.visible = bVisible;
        }
    }

    return out;
}

然后根据您的代码,实现可能是:

obj = findObjects(MovieClip, container);

【讨论】:

  • 首先非常感谢您发布我的问题的答案。我试图实现你给我的东西,但我一直收到这个错误。 1067:将 Array 类型的值隐式强制转换为不相关的类型 Class。这是我在主 .as 文件中调用此方法的方式。 Blocks = MyBase.findObjects(Block,gamesprite); // block is the name of the object on the stage. and this function works // if i don't have another instance of it. turret = MyBase.findObjects(turret, gamesprite);
  • 如果我将var out:Array 定义为 Class 类型呢?你能做到吗?
  • 该错误表明您正在解析Array 类型的变量作为findObjects() 的第一个参数
  • 不,out 是一个由findObjects() 创建、填充然后返​​回的数组
  • 我认为它是数组类型的唯一方法是如果我多次调用该方法,因为它会添加两个要检查的项目。这只是一个想法。
猜你喜欢
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多