我有SKSpriteNode
需要更改texture
,因为在我的2d同构游戏中,当对象面向不同的方向时,它需要使用不同的帧。起初我很简单地完成了这个:self.sprite.texture = SKTexture(imageNamed: frameName)
,但我发现这导致了一个“闪烁”,精灵在一段时间内变得不可见(大概是在加载新纹理时)。
我决定实现SKTexture
个对象的静态缓存,以避免从磁盘重新加载。它运行良好,但它仍然遇到相同的闪烁问题仅在每次使用第一次时。查看this video以了解我的意思。源代码:
class GameObject : GameSprite {
static var textureCache:[String:SKTexture] = [:]
func setup() {
self.sprite = SKSpriteNode(imageNamed: assetName)
for dir in Direction.directions {
let textureName = self.assetPrefix + dir.description.lowercaseString
GameObject.textureCache[textureName] = SKTexture(imageNamed: textureName)
}
}
var assetName:String {
return self.assetPrefix + self.direction.description.lowercaseString
}
var direction:Direction {
set {
if self.dir != newValue.rawValue {
self.dir = newValue.rawValue
self.sprite.texture = GameObject.textureCache[assetName]
}
}
get { return Direction(rawValue: self.dir)! }
}
// ...
}