【问题标题】:Why does overriding the position variable of my SKSpriteNode subclass slow things down so much?为什么覆盖我的 SKSpriteNode 子类的位置变量会大大减慢速度?
【发布时间】:2014-08-14 03:55:06
【问题描述】:

Scratch 中有一个很酷的函数penDown,它可以让您的精灵在从A 移动到B 时在屏幕上追踪某种颜色的线。我想通过子类化SKSpriteNode 和每当位置发生变化时都会收到通知。然而,这个简单的覆盖导致整个事情变慢了(FPS 从 20 下降到 7,只有两个精灵):

override var position : CGPoint {
    get {
        return super.position
    }
    set {
        super.position = newValue
        // Add this new point to the bezier path of the line so that I can trace it.
    }
}

为什么会这样?

【问题讨论】:

  • 你确定是覆盖导致速度变慢,而不是把每个点添加到贝塞尔路径然后渲染它?
  • @MikeS 是的,因为我实际上还没有做任何事情。这就是您在此处看到的内容:只是一条评论。
  • 好的,只是检查一下:)
  • 您是否尝试过改用property observersoverride var position : CGPoint { didSet { // ... } }
  • @MikeS 哦,这正是我所需要的——根本不影响 FPS。请随意回答,以便我接受。

标签: swift sprite-kit


【解决方案1】:

在这种情况下,您应该使用 property observers 而不是覆盖 getset

override var position : CGPoint {
    didSet {
        // Add this new point to the bezier path of the line so that I can trace it.
    }
}

【讨论】:

    猜你喜欢
    • 2010-11-17
    • 2020-03-04
    • 2020-05-11
    • 2011-10-26
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多