2017-02-07 10 views
1

SceneKit & SpriteKit &の両方を使用する必要があるiOSゲームでは、Render/Updateループ機能について不思議でした。SCNSceneまたはSCNNodeに「update(_ currentTime:TimeInterval)」をSKSceneと同じ方法で持たせることはできますか?

私はSpawnControllerクラスを使用して、異なるタイプのオブジェクトを生成します&時間間隔に基づいています。

今私は、デリゲート更新機能の内部で、私はそうのように私のSpawnControllerのカスタム更新機能を呼び出すように私はそれを変更したhere ようSCNSceneRendererDelegateに準拠GameViewControllerを持っている:

extension GameViewController: SCNSceneRendererDelegate { 
    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { 
     mySpawnController.nextSpawn() 
    } 
} 

私はそこに感じますSCNSceneまたはSCNNodeにデリゲートを追加するなど、より良い方法である必要があります。

私の質問:SCNSceneまたはSCNNodeためSKSceneが持っていると同じように:

が、それは "更新(時間間隔_ CURRENTTIME)" を持つことは可能ですか? また、私のGameViewControllerのSCNSceneRendererDelegate更新機能から、カスタム追加アップデート関数を呼び出す必要がありますか?

おかげ

答えて

1

SCNViewは、SCNSceneRendererDelegateに準拠して割り当てられたデリゲートにrenderer(_: updateAtTime:)を呼び出し、それがゲームループロジックを挿入するための適切な場所です。

質問について:SCNSceneでもSCNNodeでも独自の更新方法がありません。 SceneKitとSpriteKitの両方を使用している場合は、上で述べたように、ゲームループロジックの場所を1つ用意するだけで十分です(ただし必須ではありません)。

正確には、もののループメソッドをレンダリング、同様に違いが見えるです:

  • がSpriteKitベースシーンで呼び出しは、レンダリングループ:SKSceneDelegateupdate(_:) SceneKitで
  • ビュー(または他のSCNSceneRenderer )呼び出しループ:SCNSceneRendererDelegaterenderer(_: updateAtTime:)

Wh SpriteKitビューのileにはSKViewDelegateview(_:shouldRenderAtTime:)があり、レンダーループを呼び出す必要がある場合はtrueを返す必要があります。 SKSceneの代理人は、SKSceneのサブクラス化を避けるためにのみ存在します。

アップデートロジックをより正確に制御したい場合は、GameplayKitをSceneKit/SpriteKitから独立して使用することをお勧めします。per-entity/per-componentアップデートとエンティティ/コンポーネントの再利用などが簡単にできます。

+0

これは私が必要としたものです[GameplayKit](https://developer.apple.com/library/content/documentation/General/Conceptual/GameplayKit_Guide/#//apple_ref/doc/uid/TP40015172-CH1-SW1) ありがとうございました – vikMage

関連する問題