2016-02-12 75 views
-3

我有一些问题与AS3对象数组。我试图建立一个库存系统,用户可以左右导航(正在工作)。当用户按下ENTER时,该项目应该装备。开关AS3对象问题

我打算使用switchcase装备物品,因为游戏中只有8件物品。使用跟踪时我得到结果[object purpleSword],但我的switch没有得到任何结果或触发任何事情。我需要equipItem函数来找到在arrayItems中找到的purpleSword。当从地板上拿起时,物品会被添加到arrayItems

有没有人有使用对象的RPG库存系统的任何提示?提前谢谢了。

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; 
     } 
    } 
+0

如果您的数组中的项目不是字符串,那么您的switch语句将无法找到它们。在switch语句中,您正在检查参数itemNumber是否等于字符串“purpleSword”。如果itemNumber不是一个字符串,或者是一个包含其他内容的字符串,那么您将永远不会遇到这种情况。 – DodgerThud

+0

AS3有一个类型系统,你应该用它来帮助你理解你自己的错误,并帮助他人理解你的代码(就像我们一样)。 – Aaron

回答

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类等。但是,你真的应该使用比Object更具体的东西,它可能是任何类型的对象,并且不会告诉您它可能具有哪种属性。