【问题标题】:AS3 Objects Issue with Switches开关的 AS3 对象问题
【发布时间】:2016-02-12 11:41:25
【问题描述】:

我在使用 AS3 对象数组时遇到了一些问题。我正在尝试制作一个库存系统,用户可以左右导航(正在工作)。当用户按下 ENTER 时,该项目应该装备。

我打算使用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;
        }
    }

【问题讨论】:

  • 如果您的数组中的项目不是字符串,那么您的 switch 语句将无法找到它们。在您的 switch 语句中,您正在检查参数 itemNumber 是否等于字符串“purpleSword”。如果 itemNumber 不是字符串,或者是带有其他内容的字符串,那么你永远不会遇到这种情况。
  • AS3 有一个类型系统,你应该使用它来帮助你理解自己的错误,并帮助其他人理解你的代码(比如我们)。

标签: actionscript-3 flash


【解决方案1】:

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 更具体的东西,这可能是任何类型的对象,并且不会告诉你它可能具有什么样的属性。

【讨论】:

    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2011-05-14
    相关资源
    最近更新 更多