首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKLightNode没有使用SKCameraNode进行缩放

SKLightNode没有使用SKCameraNode进行缩放
EN

Stack Overflow用户
提问于 2017-06-11 23:50:31
回答 1查看 238关注 0票数 3

在雪碧套件中,我使用SKCameraNode来放大和缩小一个SKScene。场景中的任何SKLightNodes都不会放大。他们不是相机的孩子,所以不应该是不变的。在上面找不到任何东西--搜索"SKLightNode SKCameraNode“就可以得到0的结果。

使用Xcode 8.3.3并从一个基本的Game/Swift项目开始,我将GameScene.swift中的GameScene.swift()替换为:

代码语言:javascript
复制
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属性。这有点好,但这不是一个忠实的缩放。

代码语言:javascript
复制
    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的代码:

代码语言:javascript
复制
    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中)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-12 03:23:32

我要感谢你提供了一个我们可以测试的例子。通过玩它,我肯定可以看到光线的增长和收缩,但它并不是太多,(如果你把相机移离位置(0,0)

我甚至尝试将SKLightNode添加到单独的SKNode中,并对节点进行缩放,但结果是相同的。

我还试图将场景调整到更大的大小,但结果仍然一样。

然后,我决定玩视图大小,低,看,我能够得到不同的结果,当我调整这一点。这意味着SKLightNode比SKView大,而不是SKScene大小(真的是苹果?)。这或者离开了SKView提供的上下文。无论哪种方式,看起来您都没有使用SKLightNode进行缩放。(顺便说一句,阴影还在放大,所以也许你只需要在更好的照明效果下工作?)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44489760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档