你如何在Swift中获得精灵/纹理的原始文件名?

时间:2016-05-18 10:10:04

标签: ios swift sprite-kit

我创建了一个精灵并为其分配了一个图像文件。

logoImage.texture = SKTexture(imageNamed: "image2.png")

然后在某些情况下,我改变了图像。

print(logoImage.texture?.description)

在应用程序的另一部分,我想检查当前正在显示的图像。但我不知道如何获取文件名。

使用:

"<SKTexture> 'image2.png' (500 x 500)"

返回:

texlive-formats-extra

显然包含文件名,但我如何获取文件名呢?

4 个答案:

答案 0 :(得分:3)

我建议您避免暴露对象的内部逻辑。

绝对应该在当前使用的纹理上构建游戏逻辑。演示文稿应仅仅是对实际数据的表示。

所以你应该创建自己的包装逻辑和数据的类,就像这样。

class Logo: SKSpriteNode {

    enum Type: String {
        case A = "Image1", B = "Image2"
        var imageName: String {
            return self.rawValue
        }
    }

    private var type: Type {
        didSet {
            self.texture = SKTexture(imageNamed: type.imageName)
        }
    }

    init(type: Type) {
        self.type = type
        let texture = SKTexture(imageNamed: type.imageName)
        super.init(texture: texture, color: .clearColor(), size: texture.size())
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

用法

现在您可以轻松创建徽标

let logo = Logo(type: .A)

您可以更改该精灵的纹理

logo.type = .B

您可以查看当前使用的纹理

switch logo.type {
case .A: print("It's using Image1")
case .B: print("it's using Image2")
}
  

最后一件事。我将Image1.pngImage2.png替换为Image1Image2。如果您正在使用资产目录(并且您应该),那么您不需要指定文件扩展名。

答案 1 :(得分:0)

您可以使用:

if logoImage.texture?.descriptio.containsString("image1.png") {
   // your code for image1 here
} else {
   // your code for image2 here
}

你可以使用:

import Foundation

containsString

的代码中

答案 2 :(得分:0)

我很确定有更优雅的方法,但它有效:

if let rangeOfIndex = texture.description.rangeOfCharacterFromSet(NSCharacterSet(charactersInString: "'"), options: .BackwardsSearch) {
   let filename = texture.description.substringToIndex(rangeOfIndex.endIndex)
   if let r = filename.rangeOfCharacterFromSet(NSCharacterSet(charactersInString: "'"), options: .LiteralSearch) {
      print(filename.substringFromIndex(r.startIndex).stringByReplacingOccurrencesOfString("'", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil))
   }  
}

答案 3 :(得分:0)

你可以用这个:

--startup-project

它不漂亮,但它有效