包裹网格中的项目

时间:2014-06-25 23:22:08

标签: actionscript-3 flash adobe

即时制作库存系统,iv设法在x轴上添加/删除和排序项目。所以它所做的就是添加和删除并在一行中使用它们。我似乎无法弄清楚如何让它每10个瓷砖下降1个空间,或者左右。我在我的游戏中使用这样的方法用于另一件事,但是idk ... ic ant想出如何为我的库存做这件事

                tile.x = TILE_SIZE * (i % 800);
                tile.y = TILE_SIZE * (j % 600);

这是我将代码添加到广告资源

的代码
    protected function addInvItem(item:MovieClip, c:Class)
    {
        item = new c();
        inventory.itemsInInventory.push(item);
        inventory.inventorySprite.addChild(item);
        item.x = (inventory.itemsInInventory.length-1)*40;
        item.y = 0;
        item.width = 30;
        item.height = 25;
        item.addEventListener(MouseEvent.CLICK, inventory.useItem);
    }

当您点击某个项目

时,此代码会删除并排序库存
    public function useItem(e:MouseEvent)
    {
        var item:MovieClip = MovieClip(e.currentTarget);
        inventorySprite.removeChild(item);
        itemsInInventory.splice(itemsInInventory.indexOf(item), 1);
        item.removeEventListener(MouseEvent.CLICK, useItem);
        sortInventory();
    }
    public function sortInventory()
    {
        for (var i:int = 0; i < itemsInInventory.length; i++)
        {
            itemsInInventory[i].x = i * 40;
        }
    }

1 个答案:

答案 0 :(得分:0)

使用模块化运算符

var len:int = inventory.itemsInInventory.length;
item.x = 40 * (len%10);
item.y = 40 * Math.floor(len/10);

你的循环看起来像这样:

for (var i:int = 0; i < itemsInInventory.length; i++)
{
    itemsInInventory[i].x = 40 * (i%10);
    itemsInInventory[i].y = 40 * Math.floor(i/10);
}