Проблемы со счетчиком узлов SpriteKit Swift

Симулятор показывает количество узлов, что есть 2 узла. Но почему? Так как есть только один вар(мяч). Есть ли способ создать круг, не удваивая узлы.

class GameScene: SKScene {

var ball = SKShapeNode(circleOfRadius: 50)

override func didMoveToView(view: SKView) {

    ball.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2)
    ball.fillColor = SKColor.blackColor()
    self.addChild(ball)
}

person Miles Militis    schedule 24.07.2015    source источник


Ответы (1)


Это происходит потому, что установлен SKShapeNode fillColor. Очевидно, что когда установлены либо fillColor, либо strokeColor, для каждого из них требуется дополнительный узел и дополнительный проход отрисовки. По умолчанию уже установлен strokeColor (один узел, один проход отрисовки), а поскольку fillColor установлен дополнительно, для рендеринга формы требуются два узла (и два прохода отрисовки).

SKShapeNode во многих случаях не является эффективным решением по очевидным причинам. Для одного SKShapeNode требуется хотя бы один вызов отрисовки. Есть несколько интересных сообщений, связанных с этой темой, например, этот one или этот один.

Но все же, ИМО, следует избегать SKShapeNode, если это не единственное решение. Просто из соображений производительности. И в вашем случае, если вы, например, хотите иметь много разных видов мячей, эффективным решением будет использование атласа текстур и SKSpriteNode для представления этих текстур. Таким образом, вы можете визуализировать столько шаров, сколько захотите, за один проход отрисовки.

Обратите внимание, что проходы отрисовки гораздо важнее, чем количество узлов, когда речь идет о производительности. SpriteKit может отображать сотни узлов со скоростью 60 кадров в секунду, если количество проходов отрисовки, необходимых для визуализации сцены, невелико.

person Whirlwind    schedule 24.07.2015