SKTexture не меняется должным образом
Так как в названии написано, моя SKTexture не меняется, как я ожидал.
Вот как я объявляю свой синглтон в классе игрока:
static let sharedInstance = NHPlayer()
У меня есть эта функция:
func setSkin(name: String) {
print("Before : \(body.texture)") // Print default SKTexture
body.texture = atlas.textureNamed("\(name)-body")
print("After : \(body.texture)") // print the SKTexture I choose in game
}
Я называю тело так:
func loadAppearance() {
let name = getCurrentSkin()
print(name)
body = SKSpriteNode(texture: atlas.textureNamed("\(name)-body"))
addChild(body)
}
Я получил название текстуры, которую я хочу, используя эту функцию:
func getCurrentSkin() -> String {
let defaults = NSUserDefaults.standardUserDefaults()
var name = defaults.valueForKey("currentSkin")
if name == nil {
name = "default"
}
return "\(name!)"
}
Вызов setSkin здесь:
func play() {
let defaults = NSUserDefaults.standardUserDefaults()
let current = charactersList.filter{ $0.name == nameLabel.text?.lowercaseString }
removeFromParent()
defaults.setObject(current.first?.name, forKey: "currentSkin")
NHPlayer.sharedInstance.setSkin((current.first?.name)!)
GameScene.sharedInstance.restart()
}
Он печатает хорошее название текстуры, но текстура не загружена, я должен закрыть игру и открыть ее снова, чтобы произошло изменение SKTexture.
Есть идеи как починить?
Если вам нужна дополнительная информация, не стесняйтесь спрашивать.
1 ответ
Вы уверены, что не вызываете NHPlayer() нигде, кроме как в своем классе игрока?
Похоже, когда вы назначаете новую текстуру, она назначается точно, но другому экземпляру, а не одиночному