我正在設計一個庫存系統。現在,我需要測試一個物品是否在庫存中,以便階段知道是否在特定級別實例化該物品。作爲e.target傳遞的AS3對象不匹配通過其數組索引傳遞的相同對象
我添加的項目組中的電平,所以這種代碼位於陣列環路「卸載」對應於每個級別的項目的「包」中。
if (inv.indexOf(group[i]) == -1) {
//add item + item functionality
}
這種方法適用當我添加的項目清單,如這樣的:
inv.push(group[i]);
if (inv.indexOf(group[i]) == -1) {
//add item + item functionality
}
但是,這並不工作,因爲我爲什麼要添加項目到庫存沒有收集用戶它首先?所以代碼實際上是構造成這樣:
if (inv.indexOf(group[i]) == -1) {
//if item is not in inventory, add to stage
addChild(group[i]);
//when a user clicks this (any) item,
group[i].addEventListener(MouseEvent.CLICK, function itemFunctionality(e:MouseEvent){
//target item clicked
var item = e.target;
//add the item to the inventory
inv.push(item);
//sidenote: if i were to check inv.indexOf(item) here, i
//would get a positive index. unfortunately,
//i cant check whether the item is in the inventory
//after its already been added to the level...
item.removeEventListener(MouseEvent.CLICK, itemFunctionality);
});
}
問題是,當你離開和回來的水平,你已經收集到的物品重新實例。如果您再次收集項目,則清單會添加您已收集的項目的副本。
的inv.indexOf(group[i])
檢查不理解的是,當陣列循環到達相應,item group[i] ==
對象通過inv.push(item)
或者換句話說添加到清單inv.push(e.target)
(其中,當然,我無法直接寫入代碼) ...
當我跟蹤最新靜態數組inv
,在陣列內環路什麼group[i]
,或者什麼e.target
是,它們都輸出相同類型的項目爲「[object ITEMNAME]」,表示的indexOf內選中SHOULD匹配。
更新:
如果我看來,項目靜態以及它們屬於這種方法的陣列組的鼠標事件回調中的工作原理:
inv.push(item);
group.splice(group.indexOf(item), 1);
雖然我已刪除的項目以及來自他們自己的類的項目組,並將它們放在關卡類本身內......我覺得這種方法很糟糕,因爲一切都變得雜亂無章並且分組到同一個類中。
任何有幫助的建議?
這是不是很清楚你是什麼意思下「離開並回來」,但據我所知你正在試圖檢查DisplayObject是否在數組inv中。而這種方法將無法工作。您需要爲每個項目添加一個ID,換句話說,您的關卡應該建立在某個模型上。在這個模型中,您可以描述關卡上存在的物品,已連接的物品。這是你的應用程序設計的問題,而不是語言。 – Nbooo