在Grid AS3中平铺对象

时间:2011-04-08 09:10:54

标签: flash actionscript-3 grid air tile

我想将一个对象数组放入网格中。我知道代码很简单,但不知怎的,我没有得到我想要的东西。

代码:

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来硬编码磁贴的位置。

提前感谢您的帮助。如果您需要进一步澄清,请与我们联系。

1 个答案:

答案 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);
}