在雪碧套件中,我使用SKCameraNode来放大和缩小一个SKScene。场景中的任何SKLightNodes都不会放大。他们不是相机的孩子,所以不应该是不变的。在上面找不到任何东西--搜索"SKLightNode SKCameraNode“就可以得到0的结果。
使用Xcode 8.3.3并从一个基本的Game/Swift项目开始,我将GameScene.swift中的GameScene.swift()替换为:
override func sceneDidLoad() {
let cameraNode = SKCameraNode()
cameraNode.position = CGPoint(x:0.0, y:0.0)
self.addChild(cameraNode)
self.camera = cameraNode
let bg = SKSpriteNode(color:.red, size:self.size)
bg.lightingBitMask = 0b0001
self.addChild(bg)
let lightNode = SKLightNode()
lightNode.position = CGPoint(x:0.0, y:0.0)
lightNode.categoryBitMask = 0b0001
lightNode.lightColor = .white
lightNode.falloff = 1.0
self.addChild(lightNode)
let zoomDuration:TimeInterval = 10.0
let zoomAction = SKAction.sequence([
SKAction.scale(to:0.25, duration:zoomDuration),
SKAction.scale(to:1.0, duration:zoomDuration)
])
self.camera?.run(zoomAction)
}正如你所看到的,光线在放大过程中保持不变。
为了解决这个问题,我尝试了下面的自定义操作来调整光的falloff属性。这有点好,但这不是一个忠实的缩放。
let lightAction1 = SKAction.customAction(withDuration: zoomDuration) {
(node, time) -> Void in
let lightNode = node as! SKLightNode
let ratio:CGFloat = time / CGFloat(zoomDuration)
let startFalloff:CGFloat = 1.0
let endFalloff:CGFloat = 0.25
let falloff:CGFloat = startFalloff*(1.0-ratio) + endFalloff*ratio
lightNode.falloff = falloff
}
let lightAction2 = SKAction.customAction(withDuration: zoomDuration) {
(node, time) -> Void in
let lightNode = node as! SKLightNode
let ratio:CGFloat = time / CGFloat(zoomDuration)
let startFalloff:CGFloat = 0.25
let endFalloff:CGFloat = 1.0
let falloff:CGFloat = startFalloff*(1.0-ratio) + endFalloff*ratio
lightNode.falloff = falloff
}
let lightSequence = SKAction.sequence([lightAction1, lightAction2])
lightNode.run(lightSequence)照相机一定要放大光线吗?我是不是遗漏了什么?
编辑:下面的建议是一些扩展SKView的代码:
let originalWidth:CGFloat = UIScreen.main.bounds.width
let originalHeight:CGFloat = UIScreen.main.bounds.height
let lightAction1 = SKAction.customAction(withDuration: zoomDuration) {
(node, time) -> Void in
let ratio:CGFloat = time / CGFloat(zoomDuration)
let startFalloff:CGFloat = 1.0
let endFalloff:CGFloat = 1.5
let falloff:CGFloat = startFalloff*(1.0-ratio) + endFalloff*ratio
self.view?.frame = CGRect(x: (originalWidth-originalWidth*falloff)/2.0, y: (originalHeight-originalHeight*falloff)/2.0, width: originalWidth*falloff, height: originalHeight*falloff)
}
let lightAction2 = SKAction.customAction(withDuration: zoomDuration) {
(node, time) -> Void in
let ratio:CGFloat = time / CGFloat(zoomDuration)
let startFalloff:CGFloat = 1.5
let endFalloff:CGFloat = 1.0
let falloff:CGFloat = startFalloff*(1.0-ratio) + endFalloff*ratio
self.view?.frame = CGRect(x: (originalWidth-originalWidth*falloff)/2.0, y: (originalHeight-originalHeight*falloff)/2.0, width: originalWidth*falloff, height: originalHeight*falloff)
}
let lightSequence = SKAction.sequence([lightAction1, lightAction2])
lightNode.run(lightSequence)你还需要将相机放大一半。唯一的问题是,所有的东西都是缩放的(甚至像分数/按钮一样作为子节点添加到CameraNode中)。
发布于 2017-06-12 03:23:32
我要感谢你提供了一个我们可以测试的例子。通过玩它,我肯定可以看到光线的增长和收缩,但它并不是太多,(如果你把相机移离位置(0,0)
我甚至尝试将SKLightNode添加到单独的SKNode中,并对节点进行缩放,但结果是相同的。
我还试图将场景调整到更大的大小,但结果仍然一样。
然后,我决定玩视图大小,低,看,我能够得到不同的结果,当我调整这一点。这意味着SKLightNode比SKView大,而不是SKScene大小(真的是苹果?)。这或者离开了SKView提供的上下文。无论哪种方式,看起来您都没有使用SKLightNode进行缩放。(顺便说一句,阴影还在放大,所以也许你只需要在更好的照明效果下工作?)
https://stackoverflow.com/questions/44489760
复制相似问题