在库存中排列项目

时间:2014-04-15 05:12:07

标签: actionscript-3 flash

我正在制作一个库存系统,我按照一个让您搁浅的简短教程制作完成。我设法删除了这些项目,并在某种程度上重新排列到了正确的顺序。出于某种原因,如果我点击库存中的最后一项,那么在第一项上,项目不会重新排列正确。

public class Inventory {
    var itemsInInventory:Array;
    var inventorySprite:Sprite;
    var itemNum:int;

    public function Inventory(parentMC:MovieClip) {
        itemNum=0;
        itemsInInventory = new Array();
        inventorySprite = new Sprite();
        inventorySprite.x = 50;
        inventorySprite.y = 360;
        parentMC.addChild(inventorySprite);
    }

    public function makeInventoryItems(arrayOfItems:Array){
        for(var i:int = 0; i < arrayOfItems.length; i++){
            arrayOfItems[i].addEventListener(MouseEvent.CLICK, getItem);
            arrayOfItems[i].buttonMode = true;
        }

    }
    public function getItem(e:MouseEvent){
        var item:MovieClip = MovieClip(e.currentTarget);
        itemsInInventory.push(item);
        inventorySprite.addChild(item);
        item.x = (itemsInInventory.length-1)*40;
        item.y = 0;
        item.removeEventListener(MouseEvent.CLICK, getItem);
        item.addEventListener(MouseEvent.CLICK, useItem);
    }   
    public function useItem(e:MouseEvent){
        var item:MovieClip = MovieClip(e.currentTarget);
        itemNum = item.x;
        inventorySprite.removeChild(item);
        itemsInInventory.splice(item, 1);
        sortInventory();
    }
    public function sortInventory(){
        for(var i:int = 0; i < itemsInInventory.length; i++){
            if(itemsInInventory[i].x > itemNum){
                itemsInInventory[i].x -= 40;
            }
        }
        itemNum=0;
    }
}

我相信这是我需要提供的所有编码信息,以帮助解决这个谜。 此外,还有一个游戏链接供测试。如果您想要下载游戏的链接,请询问。
LINK

1 个答案:

答案 0 :(得分:0)

而不是减去40px,只需再次设置它们的位置:

for(var i:int = 0; i < itemsInInventory.length; i++){
    itemsInInventory[i].x = i*40;
}

另外,我甚至不知道可以给splice函数提供一个对象引用,我宁愿使用:

itemsInInventory.splice(itemsInInventory.indexOf(item), 1);

当您从useItem函数中的广告资源中删除事件侦听器时,请从该项中删除该事件侦听器。

item.removeEventListener(MouseEvent.CLICK, useItem);

编辑:
在Flash Player 10中,Adobe引入了Vector类,它与Array类相同,但它只能存储一种数据类型。在您的情况下,它将是MovieClipSpriteVector类的速度更快,开发人员更友好,因为您在键入myVector[i].时可以看到IDE的帮助。我推荐使用它,尽管Array没有任何问题。它只是过时了,但是当你想存储更多数据类型时它很有用。

myVector:Vector.<MovieClip> = new Vector.<MovieClip>();