我在AS3中创建游戏。 玩家可以抓取物品并将其添加到他的库存中。 一切正常,但是当玩家使用位于线路中间的物品时,我遇到了一个错误。 它没有好好重新安排.. (如果我不是很清楚,这是一段视频:http://ul.to/z7su5dqm或此处https://drive.google.com/file/d/0B5-MjJcEPm3lTTlDV09MYWxMOFE/edit?usp=sharing)
我已经有了将项目添加到广告资源的代码:
public function addInvItem(itemName:String):void{
var itemRef:Object = getDefinitionByName(itemName.toLowerCase()+"Inv");
var addedItem:MovieClip = new itemRef;
addedItem.displayName = itemName;
if (playerItems.length < 8){ // This is for the top row of up to 4 items
addedItem.y = 520;
addedItem.x = 60 + (playerItems.length) * 100;
}
if (isUnique(addedItem)){
this.addChild(addedItem);
playerItems.push(addedItem);
allItems.push(addedItem);
addedItem.buttonMode = true;
addedItem.invItem = true;
addedItem.addEventListener(MouseEvent.CLICK, useItem, false, 0, true);
puzzle = Engine.puzzle;
puzzle.gotItem(addedItem.displayName);
}
所以第一项是在x= 60 and y = 520.
然后我有了这段代码来删除和重新排列项目:
public function removeInvItem(itemName:String):void{
removedItem = itemName;
var itemNum:int;
for (var i in playerItems){
if (playerItems[i].displayName == itemName){
playerItems[i].visible = false;
itemNum = i;
} else {
playerItems[i].visible = true;
}
}
playerItems = playerItems.filter(checkForItem);
// Rearrange the rest of the items
for (i in playerItems){
if (i >= itemNum){
playerItems[i].x -= 100;
}
}
}
你看到推送我的第一件物品的错误在哪里? (我想它来自playerItems[i].x -= 100
)。
我必须找到一种方法来告诉代码第一项不能少于x = 60
但另一项必须在每次使用时移动x= -100
......
知道我该怎么做吗?
非常感谢,
答案 0 :(得分:1)
您认为playerItems[i].x -= 100;
是导致问题的地方是正确的。您正在减去当前的x位置,而不检查是否存在您的库存图标资产。
你可以这样做:
public function removeInvItem(itemName:String):void{
removedItem = itemName;
var itemNum:int;
for (var i in playerItems){
if (playerItems[i].displayName == itemName){
playerItems[i].visible = false;
itemNum = i;
} else {
playerItems[i].visible = true;
}
}
adjustInventory( itemNum );
}
public function adjustInventory( itemNum:int ):void {
var i:int;
for ( i=itemNum; i < playerItems.length; i++ ) {
//you can replace 60 with inventoryIcon.x + inventoryIcon.width instead
playerItems[i].x -= playerItems[i].x - 100 >= 60 ? 100 : playerItems[i].x - 60;
}
}
这会在您执行此操作之前评估您要移动的距离,并且仅移动必要的库存项目。我没有测试过这段代码,但这应该会让你走上正确的道路。