2016-02-12 79 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更具體的東西,它可能是任何類型的對象,並且不會告訴您它可能具有哪種屬性。