【问题标题】:finding the texture name in swift快速找到纹理名称
【发布时间】:2018-03-10 15:55:32
【问题描述】:

我正在尝试使用 swift 3 的 sprite Kit 开发一个简单的游戏。我想根据当前纹理运行不同的动画,比如

if self.texture.name == "Jump2" {
    self.run(Jump_Ouch6, withKey: "Jump_Ouch6")
} else if self.texture.name == "Jump3" {
    self.run(Jump_Ouch7, withKey: "Jump_Ouch7")
}

问题是我找不到返回当前纹理名称的方法。

我尝试过的一些事情是:

使用

print(texture?.description.contains("Jump2"))

打印一个“可选(布尔)”

我认为这意味着我在正确的轨道上......但是使用

    if (texture?.description.contains("Jump2"))! {
        print ("Hi")
    } else {
        print ("Bye")
    }

给出一个 EXC_BREAKPOINT

我通过谷歌搜索查看了这里的一些其他帖子,例如

How do you get the original filename of a sprite/texture in Swift?

虽然该类返回一个完整的 SKSpriteNode,但它并不真正适合我的需要。我仍然花了 3 多个小时思考也许我可以枚举纹理然后传递给我用来创建动画的函数。但我仍然只传递纹理名称并留在同一个地方。

有什么帮助吗??

【问题讨论】:

  • 您正在强制解开整个语句。首先,尝试调查为什么您的texturenil
  • 您好,谢谢。查看打印语句,我确实在终端输出的开头得到了一个 nil 。如果我使用条件来检查零,那么我可以得到一个结果。是纹理是“xxx”,纹理不是“xxx”
  • 我更多的是寻找一种直接访问纹理名称的方法,或者直接通过 Xcode 即 texture.name,或者通过其他方式(例如将结构传递给 SKAction),但我不能看到那个工作。一定有办法吧?我的意思是,否则这是很多 switch 和 if 语句

标签: xcode swift3 sprite-kit


【解决方案1】:

我确信有更好的方法,但这似乎效果很好

    func textureName() -> String {
        var textDesc = String()
        if texture?.description != nil {
            textDesc = (texture?.description)!
            let indexStart = textDesc.index(textDesc.startIndex, offsetBy: 13)
            let indexEnd = textDesc.index(textDesc.endIndex, offsetBy: -13)
            let textName = textDesc[indexStart..<indexEnd]
            return textName
        } else {
            return "nil"
        }
    }

【讨论】:

    【解决方案2】:

    我建议您一起采用不同的方法,即您要消耗大量 CPU 周期才能找到名称。相反,我建议检查hashValue 这是一个整数比较,它可以让事情变得更快。您甚至可以设置一个字典来帮助您更轻松地区分不同的值,例如:

    names = ["Jump1":jump1.hashValue,"Jump2":jump.hashValue]
    if texture.hashValue = names["Jump1"]
    

    现在请记住,hashValue 可能与其他纹理发生冲突,因此我建议您进行测试以确保所有纹理都具有唯一的 hashValue。

    如果您发现它们发生冲突,那么您可能需要找到其他方法,例如使用描述的 hashValue 或扩展 SKTexture 以赋予其派生唯一标识符的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多