XNAを使用したゲーム内レベルの設計ですか?


10

ゲーム内レベルのデザインについて知りたいです。私の現在の状況はタイル張りを中心に展開しています-私はさまざまな種類のオブジェクトを含む多くの異なるレイヤーを持っています(タイル張りに詳しくない人にとって、オブジェクトはそれに割り当てられた任意のプロパティを持つ座標にすぎません)。

現在、マップファイルに少し変更を加えるたびにゲームを再コンパイルして、すべてが適切に配置されているかどうかを確認しています。マップファイルの変更が検出された場合、ゲームにレベルを自動的に再ロードさせる方法はありますか?XNAはこれを可能にしますか、それともコンテンツパイプラインの動作が動的コンテンツをそのような方法で許可しないのですか?ヒントや提案は大歓迎です。

回答:


8

私は、マップファイルがコンテンツパイプラインを介して処理され、実行時にContent.Loadでロードされることを想定しています。次の2つのオプションがあります。

  • IntermediateSerializer.Serializeを使用して、マップをXMLファイルとして保存します。次に、実行時にそれらをIntermediateSerializer.Deserializeで読み取って変更を確認できます。
  • これはより難しいものです。実行時にMSBuildを呼び出してファイルを適切なXNBに再コンパイルし、ContentManagerを使用して再ロードします。このサンプルはそれを行います。

両者の間で、私は何かを整理することができると確信しています。ありがとうございました!
Christopher Horenstein、2010年

2

これをすぐに使いたい場合は、Karvoniteを使用することもできます。

これはアジャイルな永続化フレームワークです。新しいバージョンがWindows Phone 7とxboxのどちらで動作するかはわかりません。

永続化エディターを使用して永続化定義を作成します(これは非常に簡単です。アセンブリをインポートし、永続化するクラス/構造のフィールド/プロパティを確認するだけです)。コードでObjectSpaceを開始し、そこからオブジェクトを追加/削除/取得します。 。(これらのオブジェクトは永続化されます)

抽象化を作成して、タイルエンジンやそれが呼び出すものはマップがどのように取得されるかを正確に認識せず、要求されたものを取得するだけでよい場合。その後、戻ってXmlSerializerまたはIntermediateを使用できます。他のシリアライザを実装するために必要なことは、抽象化の別の実装(インターフェースまたは抽象クラス)を作成することだけです。

XNAクリエーターズクラブのWebサイトに、実行時にコンテンツを作成する方法の例があると思います。ただし、最新のフレームワークでビルドされていない可能性があります。これにより、コンテンツパイプラインを既に使用している場合は、古いコードを保持できます。ここにリンクがあります:Winformシリーズ2:コンテンツの読み込み


私はこれを尋ねるのは少しばかげていますが、このフレームワークを使用するワークフローをどのように想定するかを説明できますか?それは本当にきちんと聞こえますが、私はそれにどのように取り組むかわかりません。
Christopher Horenstein 2010年

1
さて、あなたは彼らの永続化エディタでシリアライゼーションを定義します。(それは本当に簡単です。オブジェクトアセンブリをインポートし、構造/クラスと永続化したいフィールド/プロパティのいくつかのボックスをチェックするだけです)これを実行したら、オブジェクトをシリアル化/非シリアル化するオブジェクトスペースを初期化できます。 。起動して実行するのはかなりすっきりと高速です。
マイケルコールマン

1
Visual Studioの外部でコンテンツを構築する方法のより良い例については、codeplexでこのプロジェクトを確認することもできます。(xnadevru.codeplex.com/...
マイケル・コールマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.