AS3对象问题与交换机

时间:2016-02-12 11:41:26

标签: actionscript-3 flash

我遇到了AS3对象阵列的一些问题。我正在尝试建立一个库存系统,用户可以左右导航(这是有效的)。当用户按下ENTER时,该项目应该装备。

我打算使用switchcase装备物品,因为游戏中只有大约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

1 个答案:

答案 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}},它可以是任何类型的对象,并且不会告诉您它可能具有哪种属性。