所以正如标题所说,我的SKTexture并没有像我期望的那样改变。
下面是我在player类中声明单例的方式:
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
}我这样叫body:
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更改发生。
对如何修复有什么建议吗?
如果您需要更多信息,请随时询问。
发布于 2016-03-03 22:17:27
您确定没有在player类以外的其他地方调用NHPlayer()吗?
看起来,当你分配新纹理时,它确实是在分配,但是分配给了另一个实例,而不是单例
https://stackoverflow.com/questions/35755530
复制相似问题