在没有闪烁的情况下更改`SKSpriteNode.texture`

时间:2015-11-26 18:21:40

标签: ios xcode sprite-kit swift2

我有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)! }
  }

  // ...
}

0 个答案:

没有答案