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

Bre*_*aut 5 cocoa-touch ios sprite-kit skcropnode swift

更新:看起来iOS 10已修复此问题.我升级到Swift 3和Xcode 8,一切都按预期工作.


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


我有一个100x100矩形形状的裁剪节点作为蒙版.如果我在其中放置一个蓝色圆圈,它会被正确裁剪.

// 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


现在,当我将同一个圆放在一个空的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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


但是同一容器中的一个精灵似乎被裁剪得很好.

// 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Kni*_*gon 4

SKShapeNode 存在漏洞,最好不惜一切代价避免它。使用它来创建形状,然后将其转换为纹理以与 SKSpriteNode 一起使用