Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 最佳参考2d阵列?_Arrays_Flash_Actionscript 3_Optimization_Actionscript - Fatal编程技术网

Arrays 最佳参考2d阵列?

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

所以,我正在创建一个相当基本的2d游戏,用户可以在其中“绘制”地图。(事实上,他们没有画出来,而是手动输入一个x/y的列表,但是设计方面现在并不重要。)

添加新的平铺时,该平铺将进入一个包含所有平铺的数组中

中心点是0,0。瓷砖可以在各个方向添加,因此可能是1,1或100100或-50,-50

有时,我想确定某个位置的瓷砖是什么。一种(糟糕的)方法是让x/y循环通过所有的瓷砖,并检查它们是否在那个位置

我目前的做法是使用一个单独的空元素的2d数组,当添加一个平铺时,它将设置在该数组中。(即tilemap[10][10]=tile[100]) 当然,因为这些值可能为负数,所以tilemap[0][0]实际上是-1000/-1000平铺。(选择为任意限制)

有更好的方法吗?我觉得使用大量的空对象可能更为理想


非常感谢。

一个可能的解决方案是保留一个
对象
字典
,其中键是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中用于此类型任务的最快对象。我见过一些基准测试,基本上不管列表的大小,查找时间几乎都是瞬间的。字典和对象之间的速度差别很小,但没有你想象的那么大(只是做了一个快速测试以确保:)