SpriteKit Swift 节点数问题
SpriteKit Swift Node Count issues
模拟器显示节点数,有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)
}
发生这种情况是因为设置了 SKShapeNode fillColor
。显然,当设置 fillColor
或 strokeColor
时,它们中的每一个都需要额外的节点和额外的 draw pass 。默认情况下已经设置了 strokeColor(一个节点,一个绘制通道),并且由于另外设置了 fillColor
,因此需要两个节点(和两个绘制通道)来渲染形状。
由于显而易见的原因,SKShapeNode
在许多情况下并不是一个高效的解决方案。一次 SKShapeNode
需要至少一次绘制调用。有一些有趣的 post 与这个主题相关,例如这个 one or this one.
但在我看来,如果 SKShapeNode
不是唯一的解决方案,则应避免使用。只是因为性能原因。在你的情况下,如果你想要有许多不同种类的球,高性能的解决方案是使用纹理图集和 SKSpriteNode
来表示这些纹理。这样你就可以在单次绘制过程中渲染尽可能多的球。
请注意,就性能而言,绘图通道比节点数量重要得多。如果场景渲染所需的绘图通道数量较少,SpriteKit 可以以 60fps 的速度渲染数百个节点。
模拟器显示节点数,有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)
}
发生这种情况是因为设置了 SKShapeNode fillColor
。显然,当设置 fillColor
或 strokeColor
时,它们中的每一个都需要额外的节点和额外的 draw pass 。默认情况下已经设置了 strokeColor(一个节点,一个绘制通道),并且由于另外设置了 fillColor
,因此需要两个节点(和两个绘制通道)来渲染形状。
SKShapeNode
在许多情况下并不是一个高效的解决方案。一次 SKShapeNode
需要至少一次绘制调用。有一些有趣的 post 与这个主题相关,例如这个 one or this one.
但在我看来,如果 SKShapeNode
不是唯一的解决方案,则应避免使用。只是因为性能原因。在你的情况下,如果你想要有许多不同种类的球,高性能的解决方案是使用纹理图集和 SKSpriteNode
来表示这些纹理。这样你就可以在单次绘制过程中渲染尽可能多的球。
请注意,就性能而言,绘图通道比节点数量重要得多。如果场景渲染所需的绘图通道数量较少,SpriteKit 可以以 60fps 的速度渲染数百个节点。