Mendapatkan jalur wadah penyimpanan
ringkasan
Mendapatkan jalur kontainer penyimpanan untuk perangkat penyimpanan yang dipilih.
Lingkungan operasi
Prasyarat
Versi XNA yang Didukung |
|
Platform yang Didukung |
|
Versi Vertex Shader yang Diperlukan Windows | 1.1 |
Versi Pixel Shader yang Diperlukan Windows | 1.1 |
Lingkungan operasi
balei-balei |
Cara bekerja dengan sampel
Berfungsi keyboardXbox | 360 controllermouse | ||
---|---|---|---|
Memilih perangkat penyimpanan | Sebuah | Sebuah | - |
zat
Tentang UI Pemilihan Perangkat Penyimpanan
Xbox 360 memiliki beberapa perangkat penyimpanan, termasuk hard drive dan unit memori. Saat menyimpan data untuk game, dll., Xbox 360 hadir standar dengan UI (antarmuka pengguna) yang memungkinkan Anda memilih perangkat mana yang akan disimpan data. (Lihat gambar di atas)
Dalam contoh ini, kita menggunakan UI ini untuk mendapatkan jalur tujuan.
Menambahkan Komponen Layanan Game
UI pilihan perangkat simpan berfungsi secara asinkron dengan game yang sebenarnya. Untuk mencapai ini, Anda perlu menambahkan layanan game dan meminta layanan game menggerakkan UI pilihan perangkat simpan.
// 非同期処理を行うためのゲームサービスコンポーネントを追加
this.Components.Add(new GamerServicesComponent(this));
GamerServicesComponent
pembangun
Buat instance GamerServicesComponent untuk menangani layanan gamer.
permainan | Permainan | Komponen ini dan kelas game terkaitnya. |
Mulai menampilkan UI pemilihan perangkat penyimpanan
Untuk menampilkan UI pilihan perangkat simpan, panggil metode "Guide.BeginShowStorageDeviceSelector" dalam metode Update. Namun, UI pemilihan perangkat simpan tidak akan ditampilkan pada saat memanggil metode ini, tetapi akan dipanggil oleh layanan game yang baru saja Anda tambahkan.
Argumen pertama dari metode Guide.BeginShowStorageDeviceSelector menentukan metode yang akan dipanggil setelah perangkat dipilih di UI Simpan Pemilih Perangkat. Anda harus mendefinisikan metode ini sendiri (lihat bagian berikutnya).
Argumen kedua dapat diatur ke data apa pun. Jika Anda ingin menggunakan beberapa data setelah memilih perangkat penyimpanan, atur parameter ini ke data Anda sendiri.
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
Guide.BeginShowStorageDeviceSelector
Metode
Memulai proses untuk menampilkan UI pemilihan perangkat penyimpanan. Operasi ini dilakukan secara asinkron dengan proses game.
Callback | AsyncCallback | Mengatur metode yang dipanggil setelah perangkat simpan dipilih. |
negara | Benda | Atur data Anda sendiri untuk digunakan untuk pemrosesan asinkron. |
Ngomong-ngomong, UI pemilihan perangkat simpan ini tidak ditampilkan karena dipilih secara otomatis jika hanya satu perangkat yang terhubung. Itu juga tidak ditampilkan di Windows.
Metode pemrosesan setelah memilih perangkat penyimpanan
Metode yang ditentukan dalam metode Guide.BeginShowStorageDeviceSelector ditentukan untuk menerima IAsyncResult.
<summary>
ストレージデバイスを取得するために呼ばれる
</summary>
<param name="result">非同期処理の結果</param>
private void GetStorageDevice(IAsyncResult result)
{
// 結果をもとにストレージデバイスの選択UIを終了してストレージデバイスを取得します
StorageDevice storageDevice = Guide.EndShowStorageDeviceSelector(result);
if (storageDevice != null && storageDevice.IsConnected)
{
// ストレージデバイスの取得に成功し、接続されている場合 /////
// ストレージコンテナを開きます
using (StorageContainer container = storageDevice.OpenContainer("XNASample"))
{
// コンテナの名前を取得
this.storageContainerName = container.TitleName;
// コンテナで指定されているパスを取得
this.storageContainerPath = container.Path;
}
}
}
Metode ini dipanggil ketika Anda telah menyelesaikan proses pemilihan perangkat di UI simpan pemilihan perangkat.
Anda dapat menerima perangkat penyimpanan dengan meneruskan hasil yang diteruskan oleh argumen (IAsyncResult) ke argumen "Guide.EndShowStorageDeviceSelector". Perhatikan bahwa jika Anda membatalkan pilihan, null akan dikembalikan.
Guide.EndShowStorageDeviceSelector
Metode
Menampilkan UI pemilihan perangkat simpan dan menerima perangkat simpan.
Hasil asyncResult | Hasil IAsync | Lewati hasil pemilihan perangkat simpan. |
Nilai Pengembalian | Perangkat Penyimpanan | Perangkat penyimpanan yang dipilih. Jika pilihan dibatalkan, null dikembalikan. |
Periksa apakah perangkat benar-benar terhubung dengan properti "StorageDevice.IsConnected" dan buka kontainer dengan metode "StorageDevice.OpenContainer". Argumen untuk metode StorageDevice.OpenContainer adalah nama kontainer. Nama ini mengidentifikasi kontainer tempat data disimpan.
StorageDevice.IsConnected
harta benda
Mengembalikan true jika perangkat berhasil terhubung; jika tidak, false.
StorageDevice.OpenContainer
Metode
Membuka kontainer penyimpanan dengan nama yang ditentukan.
judul Nama | tali | Nama wadah. |
Nilai Pengembalian | Wadah Penyimpanan | Mengambil kontainer penyimpanan dengan nama yang ditentukan. |
Setelah Anda memiliki kontainer, Anda dapat menggunakan properti StorageContainer.Path untuk mendapatkan jalur tempat file disimpan.
StorageContainer.Path
harta benda
Mendapatkan jalur file file penyimpanan game pengguna.
Pertimbangkan bahwa UI pemilihan perangkat penyimpanan adalah proses asinkron
Dalam sampel, saat UI pilihan perangkat simpan ditampilkan, UI ini menghitung setiap frame untuk memastikan bahwa itu berjalan secara asinkron dan menampilkan hitungannya. Jika Anda benar-benar menjalankannya, Anda dapat melihat bahwa nilai penghitung meningkat di latar belakang bahkan saat UI pemilihan perangkat ditampilkan.
Jika Anda benar-benar membuat game, Anda harus mempertimbangkan hal ini dan menghentikan kemajuan game saat Anda memilih perangkat. Atau, Anda mungkin ingin menghentikan kemajuan, tetapi melanjutkan efek dan efek layar lainnya. Area ini perlu disesuaikan agar sesuai dengan permainan yang sebenarnya.
Semua Kode
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace GetStorageContainerPath
{
<summary>
ゲームメインクラス
</summary>
public class GameMain : Microsoft.Xna.Framework.Game
{
<summary>
グラフィックデバイス管理クラス
</summary>
private GraphicsDeviceManager graphics = null;
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
スプライトでテキストを描画するためのフォント
</summary>
private SpriteFont font = null;
<summary>
ストレージコンテナの名前
</summary>
private string storageContainerName = "";
<summary>
ストレージコンテナのパス
</summary>
private string storageContainerPath = "";
<summary>
フレームカウント数
</summary>
private int frameCount = 0;
<summary>
直線のキーボード入力の状態
</summary>
private KeyboardState oldKeyboardState = new KeyboardState();
<summary>
直線のゲームパッド入力の状態
</summary>
private GamePadState oldGamePadState = new GamePadState();
<summary>
GameMain コンストラクタ
</summary>
public GameMain()
{
// グラフィックデバイス管理クラスの作成
this.graphics = new GraphicsDeviceManager(this);
// ゲームコンテンツのルートディレクトリを設定
this.Content.RootDirectory = "Content";
// 画面サイズを変更
this.graphics.PreferredBackBufferWidth = 1024;
this.graphics.PreferredBackBufferHeight = 768;
// 非同期処理を行うためのゲームサービスコンポーネントを追加
this.Components.Add(new GamerServicesComponent(this));
}
<summary>
ゲームが始まる前の初期化処理を行うメソッド
グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
</summary>
protected override void Initialize()
{
// コンポーネントの初期化などを行います
base.Initialize();
}
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
// フォントをコンテンツパイプラインから読み込む
this.font = this.Content.Load<SpriteFont>("Font");
}
<summary>
ゲームが終了するときに一回だけ呼ばれ
すべてのゲームコンテンツをアンロードします
</summary>
protected override void UnloadContent()
{
// TODO: ContentManager で管理されていないコンテンツを
// ここでアンロードしてください
}
<summary>
描画以外のデータ更新等の処理を行うメソッド
主に入力処理、衝突判定などの物理計算、オーディオの再生など
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Update(GameTime gameTime)
{
// キーボードの情報取得
KeyboardState keyboardState = Keyboard.GetState();
// ゲームパッドの情報取得
GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);
// Xbox360 コントローラの BACK ボタンを押したときにゲームを終了させます
if (gamePadState.Buttons.Back == ButtonState.Pressed)
{
this.Exit();
}
if ((keyboardState.IsKeyDown(Keys.A) && this.oldKeyboardState.IsKeyUp(Keys.A)) ||
(gamePadState.Buttons.A == ButtonState.Pressed &&
this.oldGamePadState.Buttons.A == ButtonState.Released))
{
// A ボタンが押されたとき /////
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
}
// 入力情報を記憶
this.oldKeyboardState = keyboardState;
this.oldGamePadState = gamePadState;
// フレームのカウント
this.frameCount++;
// 登録された GameComponent を更新する
base.Update(gameTime);
}
<summary>
ストレージデバイスを取得するために呼ばれる
</summary>
<param name="result">非同期処理の結果</param>
private void GetStorageDevice(IAsyncResult result)
{
// 結果をもとにストレージデバイスの選択UIを終了してストレージデバイスを取得します
StorageDevice storageDevice = Guide.EndShowStorageDeviceSelector(result);
if (storageDevice != null && storageDevice.IsConnected)
{
// ストレージデバイスの取得に成功し、接続されている場合 /////
// ストレージコンテナを開きます
using (StorageContainer container = storageDevice.OpenContainer("XNASample"))
{
// コンテナの名前を取得
this.storageContainerName = container.TitleName;
// コンテナで指定されているパスを取得
this.storageContainerPath = container.Path;
}
}
}
<summary>
描画処理を行うメソッド
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Draw(GameTime gameTime)
{
// 画面を指定した色でクリアします
this.GraphicsDevice.Clear(Color.CornflowerBlue);
// スプライトの描画準備
this.spriteBatch.Begin();
// テキスト描画
this.spriteBatch.DrawString(this.font,
"A : Data is saved in a file.",
new Vector2(50.0f, 50.0f), Color.White);
// ストレージコンテナの名前
this.spriteBatch.DrawString(this.font,
"StorageContainerTitleName : " + this.storageContainerName,
new Vector2(50.0f, 70.0f), Color.White);
// ストレージコンテナのパス
this.spriteBatch.DrawString(this.font,
"[ Path ]\r\n" + this.storageContainerPath,
new Vector2(50.0f, 90.0f), Color.White);
// フレームカウント
this.spriteBatch.DrawString(this.font,
"FrameCount : " + this.frameCount,
new Vector2(this.graphics.PreferredBackBufferWidth - 200.0f, 50.0f), Color.White);
// スプライトの一括描画
this.spriteBatch.End();
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}