タイトルストレージ
パッケージに含まれるデータの読み込み
System.IO 名前空間のファイル入出力 API は Windows PC 上であればアクセス権限のある範囲で、自由にパスを指定してファイルを読み書きできます。しかし Xbox 360 や Windows Phone のような、アプリケーションごとに専用のデータ領域が割り当てられる分離ストレージ環境では、パスを用いて自由にアクセスすることはできません。
プログラムコード以外に、ゲームタイトルにパッケージされたデータを読み取り専用ストリームとして読み込むことができます。ゲームのプロジェクトに含まれているソースファイル以外のコンテンツ(コンパイルされないデータ)は、自動的にタイトルストレージと呼ばれる、実行ファイルと同じ領域に含まれます。
タイトルストレージに画像ファイルを追加するには「ソリューション エクスプローラ」からゲームプロジェクトを選択し、右クリックで表示されたドロップダウンメニューから「追加」→「既存の項目」を選択してください。
「既存項目の追加」ダイアログボックスが表示されるので、追加するファイルを選択して「追加」ボタンを押します。右下のコンボボックスで表示するファイル形式を絞り込むことができます。目的のファイル形式が表示されない場合は「すべてのファイル」を選択してください。
タイトルストレージに含むファイルはコンパイル対象ではないので、ビルド時にタイトルストレージとなるゲームのパッケージに複製されるように設定しなければなりません。追加したファイルを選択した状態で「プロパティ」ウィンドウを表示し、「ビルド アクション」プロパティの値を「なし」に、「出力ディレクトリにコピー」プロパティの値を「新しい場合はコピーする」に変更してください。
以上で、ファイルの追加の説明は終了です。
タイトルストレージからファイルを読み込むには Microsoft.Xna.Framework.TitleContainer クラスを用います。
public static class TitleContainer
タイトルストレージからストリームを開くには、TitleContainer クラスの OpenStream() メソッドを提供しています。
public static Stream OpenStream (string name)
name パラメータに、タイトルストレージから開くファイル名を指定します。メソッドは、指定したファイルのストリームを返します。タイトルストレージから得たストリームは読み取り専用であり、書き込むことはできません。これは、一般的なゲームが読み取り専用のメディアであることを考えれば自然なことです。
using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; public class TestGame : Game { public static void Main(string[] args) { using (Game game = new TestGame()) game.Run(); } private GraphicsDeviceManager graphicsDeviceManager; private SpriteBatch sprite; private Texture2D texture; public TestGame() { graphicsDeviceManager = new GraphicsDeviceManager(this); } protected override void LoadContent() { sprite = new SpriteBatch(GraphicsDevice); using (Stream stream = TitleContainer.OpenStream("TestImage.png")) { texture = Texture2D.FromStream(GraphicsDevice, stream); } base.LoadContent(); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White); sprite.Begin(); sprite.Draw(texture, Vector2.Zero, Color.White); sprite.End(); base.Draw(gameTime); } }
コード1はタイトルストレージから画像ファイルのストリームを取得し、これを FromStream() メソッドに渡してテクスチャを取得しまいます。