我正在尝试获得类似于任天堂在 sprite kit 中的超级马里奥奔跑游戏中的过渡效果
我只想要一个圆形切口来扩展以显示下一个场景或仅显示当前场景。这不能作为标准 iOS sprite kit 转换之一使用。
我已经用一个覆盖整个场景的全黑层完成了这项工作,并使用 SKCropNode 动画一个扩大的圆圈来显示场景。
以下是其中的代码didMove(to view: SKView)
let fullScreen = SKSpriteNode(color: .black, size: self.size)
let mask = SKSpriteNode(color: .black, size: self.size)
let circle = SKShapeNode(circleOfRadius: self.size.height / 2)
circle.fillColor = .white
circle.blendMode = .subtract
circle.setScale(0.001)
circle.isHidden = true
circle.name = "circleShape"
mask.addChild(circle)
let crop = SKCropNode()
crop.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
crop.maskNode = mask
crop.name = "cropNode"
crop.addChild(fullScreen)
crop.zPosition = 100
self.addChild(crop)
let waitAction = SKAction.wait(forDuration: 2.0)
let callAction = SKAction.run({
let cropNode = self.childNode(withName: "cropNode") as! SKCropNode
let maskNode = cropNode.maskNode as! SKSpriteNode
let circleNode = maskNode.childNode(withName: "circleShape") as! SKShapeNode
circleNode.isHidden = false
let scaleAction = SKAction.scale(to: 2.0, duration: 2.0)
scaleAction.timingFunction = scaleAction.easeInQuartic
circleNode.run(scaleAction, completion: {
cropNode.removeFromParent()
})
})
let seqAction = SKAction.sequence([waitAction,callAction])
self.run(seqAction)
这在模拟器中有效,但在设备上运行时无效(带有最新 iOS 10 的 iPad pro 2016)。在设备上,缩放动作完成后,没有出现扩展圆圈,黑色覆盖层消失。
我的问题:
1)为什么这不能在设备上工作,只能在模拟器上工作?
2)有没有更好,更有效的方法来实现精灵套件中的这种过渡?
提前致谢。