ios - SpriteKit : static background in the scene with moving SKCameraNode

标签 ios sprite-kit skspritenode skscene skcameranode

我的目标是在 SKScene 的背景中有一个静态节点.在这个场景中,我使用 SKCameraNode根据需要平移。

背景节点必须是静态的,因为它呈现的是远距离的天空,预计不会移动。

问题 :

如果我只是将背景节点作为子节点添加到场景中,我将不得不以与相机平移相同的方式移动背景,以使背景在相机的视口(viewport)内始终完全可见。我不想这样做,因为背景节点应用了一些视觉效果和过滤器,因此移动它会导致性能下降。

我想要的是在背景中布置背景作为静态节点或 View ,不必为了“跟随”相机而移动它。

我尝试了什么 :

我知道可以将一个节点作为子节点添加到 SKCameraNode以确保它跟随相机。但正如 Apple 所暗示的,这对于通常呈现在所有内容之上的 HUD 元素(如乐谱标签等)很有用。如果您想添加背景,这当然不适用,因为我希望它在背景中,在作为子节点直接添加到场景的节点后面。

尽管如此,我尝试将背景节点作为子节点添加到相机节点并使用 z 位置和类似的东西,但没有任何帮助,正如预期的那样。

我还尝试将背景作为 subview 添加到根 SKView但由于某种原因,我无法在幕后渲染它。

提前致谢。

最佳答案

编辑:没关系我的第一个答案是死胡同。以下方法虽然有效,但您似乎已经尝试过:将背景作为 child 添加到相机中。

我猜你只是在 zPosition 上遇到了一些问题。据我所知,以下概念验证按预期工作。

class GameScene: SKScene {
    let cameraNode = SKCameraNode()

    override func didMoveToView(view: SKView) {
        let center = CGPointMake(view.frame.size.width/2, view.frame.size.height/2)

        cameraNode.position = center
        addChild(cameraNode)
        camera = cameraNode
        let background = SKSpriteNode(color: SKColor.orangeColor(), size: view.frame.size)
        cameraNode.addChild(background)

        let sprite = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(100, 100))
        sprite.position = center
        addChild(sprite)
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let move = SKAction.moveBy(CGVectorMake(200, 0), duration: 2)
        cameraNode.runAction(move)
    }
}

关于ios - SpriteKit : static background in the scene with moving SKCameraNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38029226/

相关文章:

ios - 无法将 double 的 NSArray 保存到文件 ios

ios - SKSpriteNode 减慢但不应该

ios - 在 UILabel 子类中概述 UILabel 文本

ios - 使用带有 CAMediaTimingFunction 的 CADisplayLink 'combined' 为 UIView 设置动画。 (获得任意曲线)

ios - UIView 作为应用程序的组件

ios - Swift - 必须调用父类(super class) SKSpriteNode 错误的指定初始值设定项

ios - 如何进行 CGPath 或 SKShapeNode 旋转

sprite-kit - colorizeWithColor 和 SKLabelNode

swift : Transform SKSpriteNode

ios - 如何创建具有相同纹理的多个 Sprite (节点),并在删除一个节点时自动生成一个新的 Sprite ?