我创建了一个精灵并为其分配了一个图像文件。
logoImage.texture = SKTexture(imageNamed: "image2.png")
然后在某些情况下,我改变了图像。
print(logoImage.texture?.description)
在应用程序的另一部分,我想检查当前正在显示的图像。但我不知道如何获取文件名。
使用:
"<SKTexture> 'image2.png' (500 x 500)"
返回:
texlive-formats-extra
显然包含文件名,但我如何获取文件名呢?
答案 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.png
和Image2.png
替换为Image1
和Image2
。如果您正在使用资产目录(并且您应该),那么您不需要指定文件扩展名。
答案 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
它不漂亮,但它有效