【问题标题】:SpriteKit update function for custom SKNode自定义 SKNode 的 SpriteKit 更新功能
【发布时间】:2021-04-18 02:59:08
【问题描述】:

SKScene 有一个update(_ delta: TimeInterval) 函数可用于每帧。我想知道如何为自定义 SKNode 做到这一点?

用例是我正在创建一个 SKScrollView,当用户拖动到滚动视图的边缘时它会反弹回来。所以每一帧我都需要更新它的contentOffset 位置。

【问题讨论】:

    标签: sprite-kit skscene sknode


    【解决方案1】:

    这就是我所做的:

    public protocol FrameUpdator {
      func update(delta: TimeInterval)
    }
    
    public protocol FrameDriver {
      func addUpdator(_ updator: FrameUpdator)
    }
    
    open class MyScene: SKScene, FrameDriver, FrameUpdator {
    
      private var prevTime: TimeInterval? = nil
      private var frameUpdators: [FrameUpdator] = []
    
      open func update(delta: TimeInterval) {
        for updator in frameUpdators {
          updator.update(delta: delta)
        }
      }
      
      public func addUpdator(_ updator: FrameUpdator) {
        frameUpdators += [updator]
      }
    
      open override func update(_ currentTime: TimeInterval) {
        super.update(currentTime)
        
        if let prevTime = prevTime {
          let delta = currentTime - prevTime
          if delta < 1 { // guard against big delta
            update(delta: delta)
          }
        }
        
        prevTime = currentTime
      }
    }
      
    

    现在您可以简单地为您的自定义 SKNode 实现 FrameUpdator 协议,并添加到您场景的 frameUpdators 列表中

    【讨论】:

      猜你喜欢
      • 2015-09-22
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多