下面的方法是返回一个路径,但如果同一个磁贴的路径相同(为了减少处理),我不想重新计算路径
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。
答案 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>
对象及其引用的内容都不是副本,这就是全部。
<强>参考强>