tha*_*har 5 sprite-kit skspritenode swift swift3
如何从SKSpriteNode?访问图像文件名?我一直试图谷歌这个,但似乎没有答案可用.这是我的代码中无用的部分:
current_ingredient?.name = String(describing: current_ingredient?.texture)
print("Filename: \(current_ingredient?.name)")
Run Code Online (Sandbox Code Playgroud)
print命令返回:
Filename: Optional("Optional(<SKTexture> \'ingredient14\' (110 x 148))")
Run Code Online (Sandbox Code Playgroud)
所以,问题是,我怎么才得到"ingredient14"?
您可以存储用于在userData属性中创建精灵的图像名称.
let imageName = "Mario Bros"
let texture = SKTexture(imageNamed: imageName)
let sprite = SKSpriteNode(texture: texture)
sprite.userData = ["imageName" : imageName]
Run Code Online (Sandbox Code Playgroud)
现在给定一个精灵,您可以检索您最初使用的图像的名称
if let imageName = sprite.userData?["imageName"] as? String {
print(imageName) // "Mario Bros"
}
Run Code Online (Sandbox Code Playgroud)
它存储在描述中,所以这是我为了将其撕掉而制作的一个很好的小扩展。
extension SKTexture
{
var name : String
{
return self.description.slice(start: "'",to: "'")!
}
}
extension String {
func slice(start: String, to: String) -> String?
{
return (range(of: start)?.upperBound).flatMap
{
sInd in
(range(of: to, range: sInd..<endIndex)?.lowerBound).map
{
eInd in
substring(with:sInd..<eInd)
}
}
}
}
usage:
print(sprite.texture!.name)
Run Code Online (Sandbox Code Playgroud)