Плитка объекты в сетке AS3 - PullRequest
1 голос
/ 08 апреля 2011

Я хочу поместить массив объектов в сетку. Я знаю, что код прост, но почему-то я не получаю то, что хочу.

Код:

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;
  }
}

Примечания:
- Массив объявлен в другом месте, где в качестве публичной переменной
- Это должно быть частью игрового движка, который я создаю, поэтому я хочу, чтобы он был максимально гибким
- плитки читают их свойства для файла XML. Но я не хочу использовать XML для жесткого кодирования позиций плиток.

Заранее спасибо за помощь. Дайте мне знать, если вам нужно больше разъяснений.

1 Ответ

5 голосов
/ 08 апреля 2011

Я бы предложил посмотреть на оператор модуля, а не на вложенные циклы.

В этом блоге рассказывается, как это сделать:

http://www.davidpett.com/actionscript-3-dynamic-rows-and-columns/

Используя пример Дэвида в качестве отправной точки, ваш код будет выглядеть так:

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);
}
...