代码之家  ›  专栏  ›  技术社区  ›  Roman

最简单的动画导致高cpu使用率和非常高的能量影响SpriteKit

  •  0
  • Roman  · 技术社区  · 6 年前

    这是最简单的动画:一个黑洞在屏幕中间旋转。这两行代码将cpu使用率从3%提高到31%,能量影响从低到高(有时甚至非常高):

        let actionLoop   = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(360), duration: 1000))
        hole.run(actionLoop)
    

    这正常吗?我读过多少类似的讨论,但没有找到明确的答案。下面是整个代码和屏幕:

    import SpriteKit
    import GameplayKit
    
    class GameScene: SKScene {
    
    // Basic for dynamic sizes step01
    var width = CGFloat()
    var height = CGFloat()
    
    override func didMove(to view: SKView) {
    
        // Basic for dynamic sizes step02
        width = self.frame.size.width
        height = self.frame.size.height
    
        // test background color
        self.backgroundColor = .yellow
    
        // set blackhole
        let hole = SKSpriteNode(imageNamed: "blackhole")
        let startPosition = CGPoint(x: 0, y: 0)
        hole.size = CGSize(width: width/8, height: width/8)
        hole.position = CGPoint(x: startPosition.x, y: startPosition.y)
    
    
        let actionLoop   = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(360), duration: 1000))
        hole.run(actionLoop)
    
        self.addChild(hole)
    
    
    
    }
    

    }

    enter image description here enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   SimpleBeat    6 年前

    您的代码做了一些可能会影响效率的事情。

    第一, SKAction 旋转角度以弧度计算(对于 360 度应该是 2*PI 6.28 ,不是 360度 ). 现在,你的代码做了很多计算来“过度旋转”精灵,这是浪费。更好的说法是:

    SKAction.rotate(byAngle: CGFloat.pi*2, duration: 1000)