Arrays 最佳参考2d阵列?
所以,我正在创建一个相当基本的2d游戏,用户可以在其中“绘制”地图。(事实上,他们没有画出来,而是手动输入一个x/y的列表,但是设计方面现在并不重要。) 添加新的平铺时,该平铺将进入一个包含所有平铺的数组中 中心点是0,0。瓷砖可以在各个方向添加,因此可能是1,1或100100或-50,-50 有时,我想确定某个位置的瓷砖是什么。一种(糟糕的)方法是让x/y循环通过所有的瓷砖,并检查它们是否在那个位置 我目前的做法是使用一个单独的空元素的2d数组,当添加一个平铺时,它将设置在该数组中。(即tilemap[10][10]=tile[100]) 当然,因为这些值可能为负数,所以tilemap[0][0]实际上是-1000/-1000平铺。(选择为任意限制) 有更好的方法吗?我觉得使用大量的空对象可能更为理想Arrays 最佳参考2d阵列?,arrays,flash,actionscript-3,optimization,actionscript,Arrays,Flash,Actionscript 3,Optimization,Actionscript,所以,我正在创建一个相当基本的2d游戏,用户可以在其中“绘制”地图。(事实上,他们没有画出来,而是手动输入一个x/y的列表,但是设计方面现在并不重要。) 添加新的平铺时,该平铺将进入一个包含所有平铺的数组中 中心点是0,0。瓷砖可以在各个方向添加,因此可能是1,1或100100或-50,-50 有时,我想确定某个位置的瓷砖是什么。一种(糟糕的)方法是让x/y循环通过所有的瓷砖,并检查它们是否在那个位置 我目前的做法是使用一个单独的空元素的2d数组,当添加一个平铺时,它将设置在该数组中。(即til
非常感谢。一个可能的解决方案是保留一个
对象
或字典
,其中键是x/y位置
因此,如果要在10,20
处添加平铺,可以将其存储在对象中,如下所示:
this.m_objs[tileX + "_" + tileY] = new Tile;
因此,如果您想检查某物是否位于位置10,20
,您可以使用以下方法:
public function checkIfExists( x:int, y:int ):void
{
return ( this.m_objs[x + "_" + y] != undefined );
}
我建议使用
字典
,因为在字典中搜索要比在数组中搜索快得多。通过可能的坐标-1000/-1000,这将是一个巨大的优势 是的,a绝对是这里的出路;尽管您可以按照建议创建复合键;有时实现一个更好的选项,例如tiles[x][y]=值代码>,但这会因添加新条目而受到处罚;例如:if(tiles[x]==undefined){tiles[x]=newdictionary();}
+1作为字典建议。Dictionary对象是flash VM中用于此类型任务的最快对象。我见过一些基准测试,基本上不管列表的大小,查找时间几乎都是瞬间的。字典和对象之间的速度差别很小,但没有你想象的那么大(只是做了一个快速测试以确保:)