我想将一个对象数组放入网格中。我知道代码很简单,但不知怎的,我没有得到我想要的东西。
代码:
const PADDING:Number = 10:
const COL:Number = Math.floor(Math.sqrt(tiles.length);
const ROW:Number = Math.floor(Math.sqrt(tiles.length);
for(var i:int = 0; i< COL; i++)
{
var tile:TileSprite = tiles[i];
tile.x = i * tile.width + PADDING;
for(var j:int = 0; j < ROW; j++)
{
tile.y = j * tile.height + PADDING;
}
}
注意:
- 数组在其他地方被声明为公共变量
- 这是我正在构建的游戏引擎的一部分,所以我希望它尽可能灵活
- 将tile作为XML文件的属性读取。但我不想使用XML来硬编码磁贴的位置。
提前感谢您的帮助。如果您需要进一步澄清,请与我们联系。
答案 0 :(得分:5)
我建议调查模数运算符而不是嵌套循环。
此博客文章概述了如何做到这一点:
http://www.davidpett.com/actionscript-3-dynamic-rows-and-columns/
使用David的示例作为起点,您的代码将如下所示:
var COLUMNS:int = int(Math.sqrt(tiles.length));
var PADDING:Number = 10;
for(var i:int; i < tiles.length; i++)
{
var tile:TileSprite = tiles[i];
tile.x = (i % COLUMNS) * (tile.width + PADDING);
tile.y = int(i / COLUMNS) * (tile.height + PADDING);
}