当我在层次结构中添加额外的SKNode子级时,SKCropNode失败

更新:看起来像iOS 10已经解决了这个问题。 我升级到Swift 3和Xcode 8,一切都按预期工作。


我已经遇到了这个问题几次了,我不知道这是否是在SKCropNode的错误,或者如果我只是滥用它。 也许有一些文件我错过了解释为什么会发生这种情况?


我有一个具有100×100矩形形状的裁剪节点作为蒙版。 如果我在里面放置一个蓝色圆圈,它会被正确裁剪。

// Create a crope node with a small square. let cropNode = SKCropNode() let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100)) cropNodeMask.fillColor = UIColor.whiteColor() cropNode.maskNode = cropNodeMask self.addChild(cropNode) // Create a blue circle and put it in the crop node. let blueCircle = SKShapeNode(circleOfRadius: 110) blueCircle.fillColor = UIColor.blueColor() blueCircle.strokeColor = UIColor.clearColor() cropNode.addChild(blueCircle) 

在这里输入图像说明


现在,当我在同一个空的SKNode中放置相同的圆,并将该容器放置在同一个裁剪节点内时,裁剪失败。

 // Create a crope node with a small square. let cropNode = SKCropNode() let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100)) cropNodeMask.fillColor = UIColor.whiteColor() cropNode.maskNode = cropNodeMask self.addChild(cropNode) // Create a container to hold the circle. let container = SKNode() cropNode.addChild(container) // Create a blue circle and put it in the container. let blueCircle = SKShapeNode(circleOfRadius: 110) blueCircle.fillColor = UIColor.blueColor() blueCircle.strokeColor = UIColor.clearColor() container.addChild(blueCircle) 

在这里输入图像说明


但是在同一个容器里的一个精灵似乎很好。

 // Create a crope node with a small square. let cropNode = SKCropNode() let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100)) cropNodeMask.fillColor = UIColor.whiteColor() cropNode.maskNode = cropNodeMask self.addChild(cropNode) // Create a container to hold the sprite. let container = SKNode() cropNode.addChild(container) // Create a spaceship and add it to the container. let spaceshipNode = SKSpriteNode(imageNamed: "Spaceship") spaceshipNode.anchorPoint = CGPointZero container.addChild(spaceshipNode) 

在这里输入图像说明

SKShapeNode被窃听,最好不惜一切代价避免。 使用它来创build你的形状,然后将其转换为与SKSpriteNode一起使用的纹理