SpriteKitはMVCパターンに従っていますか?


11

私は現在、Old Frankと呼ばれるiOSプロジェクトに取り組んでおり、MVCのデザインパターンに従っています。

その要点です。

GameObjects(model) <- Scene(controller) -> Sprites "SpriteKit" (View)

MVCを正しく理解していると、MVCをフォローしたい場合にSpriteKitが提供する機能の多くを使用できなくなります。たとえば、any SKAction、衝突検出など。

ゲームオブジェクトが配置されているモデルと、他のオブジェクトに触れたときの反応はどうでしょうか?時間の経過とともに位置を決定するのはモデル次第ではありませんか?

レンダリング以外にMVCの「ビュー」として使用しても問題ないと思われるSpriteKitの部分はありますか?


「私はMVC設計パターンに従っている」-なぜですか?
ポールD.ウェイト2015年

2
@ PaulD.Waiteモデルを分離しておくというアイデアが気に入っています。これにより、理論的には、別のプラットフォームでの移植や再作成が容易になります。また、これまでの最大の理由であった永続性の管理が非常に簡単になります。
Skyler Lauren

ゴッチャ。持続性の目標を達成するために、MmentoパターンはMVCよりも適用可能かもしれません。あなたのスプライトはオリジネーターであるかもしれません、そして彼らは彼らの状態の保存可能な表現を作り出し、後でその表現から自分自身を復元する責任があります。あなたのシーンコントローラーは、それらに表現を要求するものかもしれません。
ポールD.ウェイト2015年

SpriteKitのようなMac / iOSのみのフレームワークを使用する場合、移植性の観点からは、可能な限り、セーブゲームを別のプラットフォームで使用できるようになる可能性もあります。
ポールD.ウェイト2015年

1
@ PaulD.Waiteコメントありがとうございます将来的に考慮すべきもう1つのパターンとしてmementoパターンを調べます。2つの質問は同じプロジェクトについてですが、無関係です。他の1つがstackoverflowに移行し、今晩さらに彼の答えを調べることに驚きます=)
Skyler Lauren

回答:


6

あなたの質問は良いものです。私はSpriteKitについてまったく同じ質問をしましたが、これに関するWeb上の情報の欠如について非常に混乱しています。SpriteKitは、すべてのModel-View-Controllerコードを同じクラス(SKSceneサブクラス)に入れることを推奨しているようです。その手法を使用して、複雑なゲームをどのように構築しますか?ゲーム状態(スコア、numLivesなど)をtouchesBegan / Endedなどのコントローラーコードと組み合わせて、すべて同じクラスでビューのレンダリングを行うと、最も単純なゲームを超えると管理が非常に難しくなります。

mementoパターンを使用して永続化を支援することは良い考えであることに同意しますが、MVCデザインに移行することも有益だと思います。現在、ゲームをMVCアーキテクチャに移行しています。現在のアプローチでは、モデル(ゲームオブジェクト)でphysicsBodiesを管理し、SKSceneサブクラスをコントローラーとして機能させ、シーンとしてSKNodesの視覚的側面を構成およびレンダリングするビューとして機能する別のクラスを使用します。私はプロセスの途中にいるだけなので、これが良いデザインになるかどうかは確かではありませんが、SKSceneの10,000行のサブクラスよりもはるかに優れているようです。


回答/コメントありがとうございます。SpriteKitの機能を使用しても、MVCの設計パターンには従わないと感じているようです。あなたは「私は」MVCを使用するか、または「あなたは」SpriteKitベース=とMVCを使用している方法を詳細にもっと行きたいのです方法について質問がある場合)skyler@skymistdevelopment.com私に電子メールを送ること自由に感じ
スカイラーローレン

ほとんどのコードをSKSceneクラスに配置する必要はありません。実際、私はSpriteKitを使用すると、ノードはSpriteKitの矢先であるため、ほとんどのロジックはシーンよりもはるかに自然にノードに分類されます。シーンは、ノードツリーの更新と入力を処理する「コントローラー」に過ぎません。ノードは「M」と「V」になる傾向があるため、「MVC」モデルはまだSpriteKitと一致しません。
Attackfarm 2015

1

簡単に言えば、SpriteKitゲームの一般的なデザインは、シーン、レイヤー、ノード、子ノードです。

各パーツを、すべてのパーツ、プロパティ、およびメソッドをカプセル化する個別のクラスにすることができます。

たとえば、レイヤー化された画像、パーティクル、各レイヤーの移動速度などのさまざまなプロパティ、およびバックグラウンドのスクロールを開始および停止するパブリックメソッドを含むBackgroundクラス。

この設計では、独自の作業を行うこれらの個別のクラスを、更新、物理、タッチイベントなどの実行を主に処理するシーンにアセンブルします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.