1

私の目標は、のバックグラウンドに静的ノードを配置することSKSceneです。このシーンではSKCameraNode、必要に応じてパンを使用します。

背景ノードは、移動しないと予想される遠くの空を表示するため、静的である必要があります。

問題:

バックグラウンド ノードを子としてシーンに単純に追加する場合、カメラのビューポート内でバックグラウンドが常に完全に見えるようにするために、カメラがパンされるのと同じ方法でバックグラウンドを移動する必要があります。背景ノードにはいくつかの視覚効果とフィルターが適用されているため、移動するとパフォーマンスが低下するため、これを行いたくありません。

私が望むのは、背景を静的ノードまたはビューとして背景に配置することです。これは、カメラを「追跡」するために移動する必要はありません。

何を試しましたか

SKCameraNodeノードがカメラに追従するようにするために、ノードを子として追加できることを知っています。しかし、Apple が示唆しているように、これは通常すべての上にレンダリングされるスコア ラベルなどの HUD 要素に役立ちます。背景を追加したい場合、これはもちろん適用できません。バックグラウンドに配置したいので、子ノードとしてシーンに直接追加されたノードの背後にあります。

それでも、背景ノードを子としてカメラノードに追加して、z 位置などで遊んでみましたが、予想どおり何も役に立ちませんでした。

また、背景をサブビューとしてルートに追加しようとしましたSKViewが、何らかの理由でバックグラウンドでレンダリングできませんでした。

前もって感謝します。

4

1 に答える 1

3

編集:私の最初の答えが行き止まりだったことを気にしないでください。ただし、次の方法は機能し、すでに試みたもののようです: 背景を子としてカメラに追加します。

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)
    }
}
于 2016-06-25T14:04:40.303 に答える