【发布时间】:2017-02-01 16:31:24
【问题描述】:
我正在尝试获得类似于任天堂在 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)
这在模拟器中有效,但在设备上运行时无效(iPad pro 2016 和最新的 iOS 10)。在设备上,缩放动作完成后,没有出现扩大的圆圈,黑色的覆盖层消失了。
我的问题:
1) 为什么这不能在设备上运行,只能在模拟器上运行?
2) 有没有更好更有效的方法来实现 sprite kit 中的这种过渡?
提前致谢。
【问题讨论】:
标签: swift sprite-kit ios10 sktransition blend-mode