Získání cesty kontejneru úložiště
shrnutí
Získá cestu kontejneru úložiště pro vybrané zařízení úložiště.
Provozní prostředí
Požadavky
Podporované verze XNA |
|
Podporované platformy |
|
Požadovaná verze Vertex Shader systému Windows | 1.1 |
Windows Požadovaná verze pixel shaderu | 1.1 |
Provozní prostředí
nástupiště |
Jak pracovat s ukázkou
Klávesnice WorksOvladač Xbox | 360 | ||
---|---|---|---|
Výběr úložného zařízení | A | A | - |
hmota
Informace o uživatelském rozhraní pro výběr úložného zařízení
Konzole Xbox 360 má několik úložných zařízení, včetně pevného disku a paměťového modulu. Při ukládání dat pro hry apod. je Xbox 360 standardně dodáván s uživatelským rozhraním, které vám umožňuje vybrat si, do kterého zařízení chcete data ukládat. (Viz obrázek výše)
V této ukázce používáme toto uživatelské rozhraní k získání cílové cesty.
Přidání komponenty herních služeb
Uživatelské rozhraní pro výběr zařízení pro ukládání funguje asynchronně se skutečnou hrou. Abyste toho dosáhli, musíte přidat herní službu a nechat herní službu řídit uživatelské rozhraní pro výběr uloženého zařízení.
// 非同期処理を行うためのゲームサービスコンポーネントを追加
this.Components.Add(new GamerServicesComponent(this));
GamerServicesComponent
konstruktor
Vytvořte instanci GamerServicesComponent pro zpracování herní služby.
hra | Hra | Tato komponenta a její přidružená herní třída. |
Spuštění zobrazení uživatelského rozhraní pro výběr úložného zařízení
Chcete-li zobrazit uživatelské rozhraní pro uložení výběru zařízení, zavolejte metodu "Guide.BeginShowStorageDeviceSelector" v metodě Update. Uživatelské rozhraní pro výběr uloženého zařízení se však v době volání této metody nezobrazí, ale bude voláno herní službou, kterou jste právě přidali.
První argument metody Guide.BeginShowStorageDeviceSelector určuje metodu, která bude volána po výběru zařízení v uživatelském rozhraní nástroje Save Device Selector. Tuto metodu musíte definovat sami (viz další kapitola).
Druhý argument lze nastavit na libovolná data. Pokud chcete po výběru úložného zařízení využívat nějaká data, nastavte tento parametr na vlastní data.
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
Guide.BeginShowStorageDeviceSelector
metoda
Zahájí proces zobrazení uživatelského rozhraní pro výběr úložného zařízení. Tato operace se provádí asynchronně s herním procesem.
zpětné volání | Asynchronní zpětné volání | Nastaví metodu, která se volá po výběru zařízení pro ukládání. |
stát | Objekt | Nastavte si vlastní data, která se mají použít pro asynchronní zpracování. |
Mimochodem, toto uživatelské rozhraní pro výběr zařízení se nezobrazuje, protože je automaticky vybráno, pokud je připojeno pouze jedno zařízení. Také se nezobrazuje v systému Windows.
Způsob zpracování po výběru úložného zařízení
Metoda určená v metodě Guide.BeginShowStorageDeviceSelector je definována pro přijetí hodnoty 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;
}
}
}
Tato metoda je volána po dokončení procesu výběru zařízení v uživatelském rozhraní pro výběr uloženého zařízení.
Uložené zařízení můžete získat předáním výsledku předaného argumentem (IAsyncResult) do argumentu "Guide.EndShowStorageDeviceSelector". Všimněte si, že pokud výběr zrušíte, vrátí se hodnota null.
Guide.EndShowStorageDeviceSelector
metoda
Zobrazí uživatelské rozhraní pro výběr uloženého zařízení a přijme uložené zařízení.
Asynchronní výsledek | Výsledek synchronizace | Předejte výsledek výběru zařízení pro uložení. |
Návratové hodnoty | Úložné zařízení | Vybrané úložné zařízení. Pokud je výběr zrušen, je vrácena hodnota null. |
Zkontrolujte, zda je zařízení skutečně připojeno s vlastností "StorageDevice.IsConnected" a otevřete kontejner pomocí metody "StorageDevice.OpenContainer". Argumentem metody StorageDevice.OpenContainer je název kontejneru. Tento název identifikuje kontejner, ve kterém jsou data uložena.
StorageDevice.IsConnected
vlastnost
Vrátí hodnotu true, pokud je zařízení úspěšně připojeno; v opačném případě hodnotu false.
StorageDevice.OpenContainer
metoda
Otevře kontejner úložiště se zadaným názvem.
názevJméno | řetězec | Název kontejneru. |
Návratové hodnoty | Úložný kontejner | Načte kontejner úložiště se zadaným názvem. |
Jakmile budete mít kontejner, můžete pomocí vlastnosti StorageContainer.Path získat cestu, kde je soubor uložen.
StorageContainer.Path
vlastnost
Získá cestu k souboru uložené hry uživatele.
Vezměte v úvahu, že uživatelské rozhraní pro výběr úložného zařízení je asynchronní proces
Když je v ukázce zobrazeno uživatelské rozhraní pro výběr zařízení pro ukládání, počítá se každý snímek, aby se zajistilo, že běží asynchronně, a zobrazí se počet. Pokud jej skutečně spustíte, uvidíte, že hodnota čítače se na pozadí zvyšuje, i když je zobrazeno uživatelské rozhraní pro výběr zařízení.
Pokud skutečně vytváříte hru, musíte to vzít v úvahu a zastavit průběh hry při výběru zařízení. Případně můžete chtít zastavit průběh, ale pokračovat v efektech a dalších efektech obrazovky. Tuto oblast je třeba upravit tak, aby odpovídala skutečné hře.
Všechny kódy
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);
}
}
}