我是否在AS3中正确使用了concat

时间:2014-08-07 14:33:03

标签: actionscript-3 vector concat

下面的方法是返回一个路径,但如果同一个磁贴的路径相同(为了减少处理),我不想重新计算路径

   public function find_path(start:Path_Tiles,end:Path_Tiles,R_G_B:Number,SCAREDNESS:Number = 1,enemie_type:Number=1, enemie_colour:Number=1):Vector.<Path_Tiles> 
    {
        for (var i:Number = 0 ; i < old_path_array_other_info.length ; i++ )
        {
            if (old_path_array_other_info[i][0] == enemie_type && old_path_array_other_info[i][1] == enemie_colour && old_path_array_other_info[i][2] == start.x && old_path_array_other_info[i][3] == start.y)
            {
                var new_vector:Vector.<Path_Tiles> = (old_path_array[i]).concat();
                return new_vector;
            }
        }
        old_path_array[old_path_array.length] = path_finder.Find_Path(Gird.TILE_SET, start, end, R_G_B, SCAREDNESS);
        old_path_array_other_info[old_path_array_other_info.length] = [enemie_type, enemie_colour, start.x, start.y];

        return old_path_array[old_path_array.length - 1];
    }

需要使用concat的原因是我不想返回敌人正在使用的完全相同的路径,因为敌人会在到达该点后从阵列中删除元素。所以我需要它的副本,但上面的方法并没有给出路径的副本它返回完全相同的路径,这意味着当敌人使用旧路径时,它的一半被删除,因此使它无用。

任何帮助都会很棒,因为我不确定我是否正确使用了concat。

1 个答案:

答案 0 :(得分:0)

如上所述:

concat创建当前目标数组/向量的副本,但它不是递归的,这意味着它不会创建您可能存储在目标数组/向量中的任何数组/向量的副本。如果您有某种多维数组/向量,那么您必须通过每个数组/向量调用concat,否则您将无法获得真正的副本。

如果您有一个多维数组/向量并且在其上调用concat,那么将复制该数组/向量,但不会复制其内部的数组/向量。喜欢:

myarray = []; 
myarray[0] = ['hello']; 
mycopy = myarray.concat(); 

mycopy是myarray的真实副本,但它内部的数组(['hello'])不是。

(old_path_array[i]).concat() 

是一个Vector。 <Path_Tiles>concat制作此Vector的副本,但它不会复制其内容,因此每个<Path_Tiles>对象及其引用的内容都不是副本,这就是全部。

<强>参考