Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Javascript 如何优化二维矩阵读取速度?_Javascript_Multidimensional Array_Matrix - Fatal编程技术网

Javascript 如何优化二维矩阵读取速度?

Javascript 如何优化二维矩阵读取速度?,javascript,multidimensional-array,matrix,Javascript,Multidimensional Array,Matrix,我正在做一个2D游戏。我将游戏地图保存在名为gameMap的js对象{}上。我的问题是,读取矩阵上的项目需要太长时间。对于碰撞检测,我通常需要检查地图矩阵的10或20项,这大约需要1毫秒,屏幕上有10个字符的碰撞检测成为应用程序的瓶颈,每帧16毫秒中的10毫秒应该持续。而且当地图变得太大时,放大倍数 假设地图上有1000 x 1000个项目。现在如果我想检查-100200的位置,我会检查gameMap['-100'][200]。我的想法是将地图划分为100 x 100个项目的象限。所以为了检查-

我正在做一个2D游戏。我将游戏地图保存在名为gameMap的js对象{}上。我的问题是,读取矩阵上的项目需要太长时间。对于碰撞检测,我通常需要检查地图矩阵的10或20项,这大约需要1毫秒,屏幕上有10个字符的碰撞检测成为应用程序的瓶颈,每帧16毫秒中的10毫秒应该持续。而且当地图变得太大时,放大倍数


假设地图上有1000 x 1000个项目。现在如果我想检查-100200的位置,我会检查gameMap['-100'][200]。我的想法是将地图划分为100 x 100个项目的象限。所以为了检查-100200,我将测试gameMap[quadrantName][100][200]。这意味着,虽然gameMap的大小大致相同,但它可以处理的项目要少得多,而且读取速度可能会以更小的比例放大。有人知道这会不会让阅读更快吗?我还可以做些什么来提高读取速度?

首先,10000x1000字节数组将消耗100MB!你真的需要这么大的阵列吗。也许你最好只存储所有元素的坐标

至于你的问题-你可以将2d数组转换成一维数组,并通过

gameMap[y * 10000 + x]

其中10000是地图的“宽度”。因此,无需将地图划分为象限。

相关搜索:游戏冲突检测如果您知道如何做,您可以使用jsperf进行测试:我真的认为数组查找时间与数组大小没有多大关系。。。gameMap似乎是一个对象{}而不是数组[],您应该将其设置为数组并使用整数值而不是字符串访问它。如果您需要索引-100到100,只需将100添加到其中,并将其设置为0-200。还请注意,在启动时,数组已正确初始化为0,且为完整长度。不要在循环中向较短的数组添加值。。。以防万一,我用的是对象,不是数组。我在js上的某个地方读到,数组[]和对象{}的查找时间都相同。也许我误解了。数组的读取速度会更快吗?可以在没有负索引的情况下进行管理,但更容易使用大小进行检查,地图在探索时自动生成,但您可以快速将其设置为1000x2000。对象不是数组,而是常规对象{},因为我需要它来保存负值。这似乎是个好主意。这真的会加快阅读速度吗?我想这与我的理论完全相反。增加物品数量真的会更快吗?我认为,使其更深意味着每层上的项目更少,读取速度更快。如果您访问位于索引999处的数组,则没有循环在0到999之间的所有位置运行,但处理器只访问内存中的该位置。至于负值,只需添加一个偏移量,使最小值为0。例如,如果您有一个从-500到500的字段,只需添加一个500的偏移量。