AS3中编写多维数组存储坐标的最高效实现方式是什么?
AS3 固定索引坐标存储的多维数组方案对比
你需要存储索引0-11共12组x、y坐标,AS3里常见的多维结构实现各有适用场景,差异和选型参考如下:
不同实现方式的核心差异
- 嵌套原生Array(二维数组)
最容易搜到的写法,无类型、长度可变,写起来最随意。
缺点很明显:没有类型校验,读写时写错索引或者值类型不会有编译提示,运行时出bug难排查,访问性能是所有方案里最低的。
示例代码:// 初始化 var coords:Array = []; for (var i:int = 0; i < 12; i++) { coords[i] = [0, 0]; // 子数组第0位存x,第1位存y } // 读写 coords[3][0] = 100; // 给索引3的坐标设置x值为100 var yVal:Number = coords[5][1]; - 嵌套Vector强类型数组
AS3专属的强类型数组结构,性能比原生Array高30%左右,有编译期类型校验。嵌套写法就是外层Vector存内层长度固定为2的Number类型Vector,分别对应x、y。
缺点是初始化代码稍繁琐,嵌套结构多一层访问开销。
示例代码:// 外层Vector长度固定为12,对应0-11的索引 var coords:Vector.<Vector.<Number>> = new Vector.<Vector.<Number>>(12, true); for (var i:int = 0; i < 12; i++) { // 内层Vector长度固定为2,存x、y两个值 coords[i] = new Vector.<Number>(2, true); coords[i][0] = 0; coords[i][1] = 0; } // 读写 coords[2][0] = 250; - 扁平化一维Vector存储
因为你要存的每组数据固定只有x、y两个值,完全不需要做嵌套,直接用长度为24的一维Number类型Vector,索引i*2存第i组的x值,i*2+1存y值即可。
这是性能最高、内存占用最低的方案,没有嵌套结构的访问开销;缺点是直接读写时需要计算偏移量,裸写可读性差,封装成读写函数就可以解决这个问题。
示例代码:// 总长度12*2=24,设为定长 var coords:Vector.<Number> = new Vector.<Number>(24, true); // 封装读写逻辑避免算错偏移 function setCoord(idx:int, x:Number, y:Number):void { coords[idx*2] = x; coords[idx*2 + 1] = y; } function getCoordX(idx:int):Number { return coords[idx*2]; } function getCoordY(idx:int):Number { return coords[idx*2 + 1]; } - Point对象类型Vector
每个元素存一个flash.geom.Point实例,直接通过.x、.y属性访问坐标。
优点是可读性最好,Point类自带距离计算、坐标偏移、拷贝等工具方法,写业务逻辑时不容易出错;缺点是每个Point都是独立对象,内存占用比纯Number存储高,属性访问的开销比直接读Vector原始值稍高。
示例代码:import flash.geom.Point; // 定长存12个Point实例 var coords:Vector.<Point> = new Vector.<Point>(12, true); for (var i:int = 0; i < 12; i++) { coords[i] = new Point(0, 0); } // 读写 coords[7].x = 300; var targetY:Number = coords[7].y;
适配你场景的选型建议
你的数据规模只有12组,完全不需要为了极限性能牺牲可维护性:
- 如果后续需要做坐标相关的逻辑计算(两点距离、坐标偏移、碰撞判断等),直接选
Vector.<Point>方案,代码直观不容易写错,这点数据量的性能差异完全感知不到。 - 如果这组坐标是每帧会高频读写的渲染底层数据,选封装后的扁平化一维Vector方案,性能拉满,有读写函数封装也不会有维护问题。
- 不要用无类型的嵌套原生Array,既没有代码提示,出问题排查成本高,性能也最差。
小提示:初始化Vector的时候把第二个参数设为
true开启定长模式,既可以避免后续代码误改数组长度导致的逻辑bug,还能进一步提升运行时性能。
内容的提问来源于stack exchange,提问作者JakeMaccaz
相关产品推荐
相关产品推荐

