Это происходит потому, что SKShapeNode fillColor
установлен. Очевидно, что когда установлены либо fillColor
, либо strokeColor
, каждому из них требуется дополнительный узел и дополнительный проход для прохода. По умолчанию уже установлен набор strokeColor (один узел, один проход для прохода), а из-за fillColor
дополнительно устанавливаются два узла (и два прохода чертежа) для визуализации фигуры.
SKShapeNode
не является эффективным решением во многих случаях из-за очевидных причин. Один SKShapeNode
требует, по крайней мере, одного вызова ничьей. Есть интересный пост, связанный с этой темой, например, этот one или этот one.
Но все же IMO, SKShapeNode
следует избегать, если это не единственное решение. Просто из соображений производительности. И в вашем случае, если вы, например, хотите иметь много разных видов шаров, решение для исполнителей было бы использовать текстурный атлас и SKSpriteNode
для представления этих текстур. Таким образом, вы можете отображать столько шаров, сколько хотите, в одиночном проходе.
Обратите внимание, что ничьи проходят гораздо важнее, чем количество узлов, когда дело доходит до производительности. SpriteKit может отображать сотни узлов со скоростью 60 кадров в секунду, если количество проходов чертежа, необходимых для рендеринга сцены, невелико.