2015-07-24 3 views
3

Симулятор показывает количество узлов, что есть 2 узла. Но почему? Поскольку существует только один var (ball). Есть ли способ создать круг, не имея двойных узлов.SpriteKit Swift Node Count issues

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) 
} 

ответ

2

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

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

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

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