我正在制作一个库存系统,我按照一个让您搁浅的简短教程制作完成。我设法删除了这些项目,并在某种程度上重新排列到了正确的顺序。出于某种原因,如果我点击库存中的最后一项,那么在第一项上,项目不会重新排列正确。
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
答案 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
类相同,但它只能存储一种数据类型。在您的情况下,它将是MovieClip
或Sprite
。 Vector
类的速度更快,开发人员更友好,因为您在键入myVector[i].
时可以看到IDE的帮助。我推荐使用它,尽管Array
没有任何问题。它只是过时了,但是当你想存储更多数据类型时它很有用。
myVector:Vector.<MovieClip> = new Vector.<MovieClip>();