SKTexture没有正确改变

时间:2016-03-02 18:42:34

标签: xcode swift sprite-kit

就像标题所说的那样,我的SKTexture并没有像我期望的那样改变。

这就是我在我的播放器Class中声明我的单身人士的方式:

    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 个答案:

答案 0 :(得分:0)

你确定你没有在你的播放器类别之外调用NHPlayer()吗?

看起来当你分配新纹理时,它确定分配,但是分配到另一个实例而不是单身