当我在层次结构中添加额外的 SKNode 子级时,SKCropNode 失败
SKCropNode fails when I add extra SKNode children in hierarchy
更新:看起来 iOS10 已经解决了这个问题。我升级到 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)
现在,当我将同一个圆圈放在一个原本为空的 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 有问题,最好不惜一切代价避免它。使用它来创建您的形状,然后将其转换为纹理以用于 SKSpriteNode
更新:看起来 iOS10 已经解决了这个问题。我升级到 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)
现在,当我将同一个圆圈放在一个原本为空的 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 有问题,最好不惜一切代价避免它。使用它来创建您的形状,然后将其转换为纹理以用于 SKSpriteNode