使用actionscript定义索引数组时遇到问题。
任务如下。我有一个点对象板。我需要将它们存储到一个数组中,这样我就可以简单地使用它的x,y坐标来访问每个点。例如,要获得点1,我希望能够使用points[1][1],等等。我在这里阅读了文档http://livedocs.adobe.com/flex/3/html/help.html?content=10_Lists_of_data_2.html,并意识到我不明白如何根据我的需要初始化数组。(特别是当它可以包含10到15行和列时,因此使用以下表示法将相当困难:masterTaskList[0] = [“洗碗”,“倒垃圾”];,如文件中所建议。)
我正在做的是:
for (var x:Number = 1; x<= boardSize; x++)
{
for (var y:Number = 1; y<= boardSize; y++)
{
var stone:StoneSprite = new StoneSprite();
stone.x = this.x + x*cellWidth;
stone.y = this.y + y*cellWidth;
stones[x][y] = stone;
}
}
但它给了我一个错误:
RangeError: Index '1' specified is out of bounds. at mx.collections::ListCollectionView/getItemAt()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:422] at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:698] at components::Board/placeStonesInNodes()[/Users/oleg/jin/goclub/trunk/goapp/usersList/src/components/Board.as:60] at components::Board/creationComplete()[/Users/oleg/jin/goclub/trunk/goapp/usersList/src/components/Board.as:44] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent()
3条答案
按热度按时间ycl3bljg1#
我手边没有AS编译器,但我相信
可能有用。
顺便问一句,你为什么从索引1开始循环呢?
ao218c7q2#
Idd,你必须将stones[x]初始化为一个数组。例如,在C++中,你可以在一行中初始化一个二维数组(我认为是常量大小),但在AS中你不能。
如果你从索引0开始循环,你也可以使用push,但是它不会给Khilon的答案增加任何东西(如果你改变循环的起始索引,这有点危险)。
0kjbasz63#
其他人是对的--您需要将数组初始化为Arrays。
我还要补充一点,因为您在填充这些数组之前就知道boardSize,所以您也应该使用该值,以避免使用Array.push带来的不必要的开销:
然后,要以您描述的方式读取值,只需使用getter: