一尘不染

SpriteKit Swift节点计数问题

swift

模拟器显示节点数,即有2个节点。但是为什么呢?由于只有一个var(ball)。有没有一种方法可以创建一个圆而不使它成为两个节点。

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

阅读 190

收藏
2020-07-07

共1个答案

一尘不染

这是因为fillColor设置了SKShapeNode
。显然,设置fillColor或时strokeColor,它们每个都需要附加的节点和附加的绘制过程。默认情况下,已经设置了strokeColor(一个节点,一个绘制过程),并且由于fillColor另外设置了,因此要渲染形状需要两个节点(和两个绘制过程)。

SKShapeNode由于明显的原因,在很多情况下,它并不是一种高效的解决方案。一个SKShapeNode需要至少一个抽奖。有此主题相关的一些有趣的帖子,例如这一个或这一个

但是,SKShapeNode即使不是唯一的解决方案,也应避免使用IMO
。仅出于性能原因。在您的情况下,例如,如果您想拥有许多不同种类的球,那么高性能的解决方案将是使用纹理图集并SKSpriteNode表示这些纹理。这样,您可以在单次绘制过程中根据需要渲染尽可能多的球。

请注意,在性能方面,绘制过程比节点数更为重要。如果场景渲染所需的绘制通过量很少,则SpriteKit可以以60fps的速度渲染数百个节点。

2020-07-07