我遇到了AS3对象阵列的一些问题。我正在尝试建立一个库存系统,用户可以左右导航(这是有效的)。当用户按下ENTER时,该项目应该装备。
我打算使用switch
和case
装备物品,因为游戏中只有大约8件物品。我在使用跟踪时得到结果[object purpleSword]
,但我的switch
没有得到任何结果或触发任何东西。我需要equipItem
函数来查找purpleSword
中找到的arrayItems
arrayItems
。当从地板上取下物品时,物品会被添加到 public var arrayItems: Array = new Array();
if (keyEvent.keyCode == Keyboard.ENTER) {
if (currentScreen == "inventory") {
if(inventoryCurrent >= 0) {
var actualCurrentItem = inventoryCurrent - 1;
equipItem(arrayItems[actualCurrentItem]);
}
}
}
public function equipItem(itemNumber) {
switch(itemNumber) {
case "purpleSword":
trace("equip purple sword");
break;
}
}
。
有没有人有任何使用对象用于RPG库存系统的提示?提前谢谢了。
Options -Multiviews
答案 0 :(得分:0)
AS3有一个类型系统,您应该使用它来帮助您了解自己的错误,并帮助其他人理解您的代码(例如我们)。
鉴于您说您的输出为您提供[object purpleSword]
,我可以假设您有一个班级purpleSword
。我的猜测是这是一个导出的符号,而不是.as类文件,但它可以是。
但这些都是猜测,因为您还没有提供任何类型信息。例如:
arrayItems:Array
可以包含任何,但您还没有告诉我们什么。您可以使用items:Vector.<Object>
存储对象,或Vector.<Sprite>
存储从Flash库导出的符号,或者更好地创建InventoryItem
类并使用Vector.<InventoryItem>
存储它们。 var actualCurrentItem
应为var actualCurrentItem:int
equipItem(itemNumber)
应为equipItem(itemNumber:int):void
?如果你这样做,你会发现(通过你自己的观察或编译器告诉你)你的equipItem()
函数是错误的:它期望itemNumber
但它会收到一个对象。
如果我之前的假设是正确的,你可以这样做:
public var items:Vector.<Object> = new <Object>[];
if (keyEvent.keyCode == Keyboard.ENTER) {
if (currentScreen == "inventory") {
if(inventoryCurrent >= 0) {
var actualCurrentItem:int = inventoryCurrent - 1;
equipItem(items[actualCurrentItem]);
}
}
}
public function equipItem(item:Object):void {
switch(item.constructor) {
case purpleSword:
trace("equip purple sword");
break;
}
}
这是有效的,因为Object/constructor
是对任何对象的类的引用,即purpleSword
类等。但是,你真的应该使用比{{更具体的东西1}},它可以是任何类型的对象,并且不会告诉您它可能具有哪种属性。