XNAコンテンツパイプラインとマップ作成ユーティリティ


7

自分が取り組んでいるゲームにXNAコンテンツパイプラインを適切に使用する方法を調査してきました。しかしながら、私は頭を包み込むのに苦労しており、最善の方法を確信できません。

具体的な例は、トップダウンの2D RPGスタイルのゲームです。マップを簡単に作成および編集できるユーティリティ(おそらくWindowsフォーム)を作成したいと考えています。各マップは1つ以上のグラフィックレイヤーで構成され、各レイヤーにはタイルのN x Nグリッドが含まれています。次に、各タイルはビットマップとして始まります。

上記の情報を与えられて、私は続行するためのいくつかの方法を見つけます:

  1. Content Pipeline XMLローダーと互換性のあるXMLファイルにマップ情報を保存します。各タイルは、対応するテクスチャアセットへの文字列参照として保存されます。テクスチャアセットがゲームプロジェクトに追加されます。
  2. Content Pipeline XMLローダーと互換性のあるXMLファイルにマップ情報を保存します。各タイルは、対応する.bmp / .pngファイルへのパスとして保存されます。

今、私は両方のアプローチについて本当に嫌いなことがあります。アプローチ1の主な問題は、マップの作成と.xnbテクスチャアセットの作成が完全に分離していることです。.xmlマップファイルはユーティリティによって作成され、テクスチャアセットはゲームのコンテンツに追加されます。これは、.xmlマップファイルとプロジェクト内のすべてのテクスチャアセットの同期を維持しようとするときに問題になります。

アプローチ2では、マップユーティリティを使用して、マップファイルの隣に適切な画像ファイルをすべて保持できます。しかし、このようなことをする必要はないようです。また、タイルごとに同じ画像をディスクからすばやくロードしないように、マップのロードについてよりインテリジェントにする必要があります。

だから私の質問です:コンテンツ生成ユーティリティ(マップエディターなど)を追加する場合、カスタムコンテンツ(マップファイル)がテクスチャアセットと常に同期していることを確認するための最良の方法は何ですか。また、私のマップエディターでは、テクスチャアセットを読み込んで表示する機能が必要になることにも注意してください。

どんな入力でも大歓迎です。

回答:


6

あなたが望むのは、XMLファイルの内容に基づいてテクスチャを構築することです。これにより、コンテンツプロジェクトにテクスチャを追加する必要がなくなり、パイプラインが自動的にテクスチャファイルをビルドに含めます。

これを行うには、カスタムコンテンツプロセッサを記述し(標準のXMLインポーターを引き続き使用できます)、ContentProcessorContext.BuildAssetそのプロセッサでを使用して外部テクスチャを参照する必要があります。

私は、カスタムを作成する必要がありますことを考えるContentTypeWriterContentTypeReader書き込みに、その後読んでExternalReferenceいるBuildAssetあなたを与えるを。


アンドリューはここにぴったりです!
ロイT.

2

すべてのタイル画像を1つの画像ファイルに入れ、タイル番号で参照します。

これにより、パフォーマンスが向上し、エラーが発生しにくくなり、Tiledなどのタイルエディターでレベルを設定できるという利点があります。


テクスチャが大きすぎると読み込みが遅くなり、特定の解像度を超えると不可能になるため、これは非常に小さなゲームのパフォーマンスが向上するだけではありません
Roy T.

1
@Roy T:タイルが多すぎて、パックされたテクスチャが「大きすぎる」場合、レンダリングパフォーマンスのために、タイルを1つ以上のテクスチャにパックする必要がある可能性があります。
Andrew Russell

@Andrew Russel、そう、そういう意味でした:)。しかし、計算を開始したばかりで、4096x4096のテクスチャ(古いビデオカードでは最大)は64x64(別名4096)の64x64スプライトをパックできるので、思ったほど問題ではないかもしれません。
ロイT.

1

私はあなたの質問を私の頭の中ではっきりさせたと100%確信していませんが、これを試してください:

1つのXMLファイル(game.xmlなど)を除いて、コンテンツエディターにアセットを追加しないでください。レベルエディターに他のファイルへのリンクを追加して、game.xmlファイルを編集してもらいます。たとえば、レベルエディタで新しいレベルを作成すると、タグ<level rank=5>Content/MyLevel/level5.xml/>がXMLファイルに追加されます。

すべてをビルドするには、カスタムコンテンツパイプライン拡張を作成する必要があります。(デフォルトのXMLプロセッサーではなく、game.xmlファイルに新しいインポーターとプロセッサーを設定してください)

このプロセッサーは、適切なインポーターとプロセッサーを呼び出すことにより、XMLファイルをトラバースし、すべてのアセットを構築します。これにより、すべてがうまく構築され、コンテンツプロジェクトとエディターに行き来する必要がなくなります。

リソース:http : //msdn.microsoft.com/en-us/library/bb447754.aspx

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