我的库存系统似乎出错了。
这是我的班级:
package
{
import flash.display.*;
public class InventoryDemo extends MovieClip
{
var inventory:Inventory;
public function InventoryDemo()
{
inventory = new Inventory(this);
inventory.makeInventoryItems([d1,d2]);
}
}
}
我已经在第二个关键帧中放置了d1和d2对象。
这是儿童班:
package
{
import flash.display.*;
import flash.events.*;
public class Inventory
{
var itemsInInventory:Array;
var inventorySprite:Sprite;
public function Inventory(parentMC:MovieClip)
{
itemsInInventory = new Array ;
inventorySprite = new Sprite ;
inventorySprite.x = 50;
inventorySprite.y = 360;
parentMC.addChild(inventorySprite);
}
function makeInventoryItems(arrayOfItems:Array)
{
for (var i:int = 0; i < arrayOfItems.length; i++)
{
arrayOfItems[i].addEventListener(MouseEvent.CLICK,getItem);
arrayOfItems[i].buttonMode = true;
}
}
function getItem(e:Event)
{
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);
}
function useItem(e:Event)
{
var item:MovieClip = MovieClip(e.currentTarget);
trace(("Use Item:" + item.name));
}
}
}
当我在舞台上只有d1和d2的黑色项目中尝试时,代码可以正常工作。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
您的错误表明在您拨打
时未创建d1和d2inventory.makeInventoryItems([d1,d2]);
您建议您在第二个关键帧中创建了d1和d2,但如果InventoryDemo是您的DocumentClass,那么它将在您到达第二个关键帧之前运行。
因此,如果您想使用d1和d2,您需要将它们移动到第一帧,或者您需要在影片的第二帧发生之前不要尝试使用它们。
如果你想在第二帧上保留d1和d2,那么你需要从构造函数中调出一个新函数,然后调用你在第二帧上调用的函数:
public function InventoryDemo()
{
//Do nothing here
//inventory = new Inventory(this);
//inventory.makeInventoryItems([d1,d2]);
}
public function initialiseInventory():void
{
//Initialise you inventory here.
inventory = new Inventory(this);
inventory.makeInventoryItems([d1,d2]);
}
然后在时间轴的第2帧调用函数:
initialiseInventory();
stop();