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() нигде, кроме как в своем классе игрока?

Похоже, когда вы назначаете новую текстуру, она назначается точно, но другому экземпляру, а не одиночному

Другие вопросы по тегам