Pridobivanje poti vsebnika za shranjevanje
Povzetek
Pridobi pot vsebnika za shranjevanje za izbrano napravo za shranjevanje.
Delovno okolje
Predpogoji
Podprte različice XNA |
|
Podprte platforme |
|
Zahtevana različica brilnika točk v sistemu Windows | 1.1 |
Windows je zahteval različico Pixel Shader | 1.1 |
Delovno okolje
peron |
Kako delati z vzorcem
Deluje tipkovnicaKrmilnik Xbox | 360 miška | ||
---|---|---|---|
Izbira naprave za shranjevanje | A | A | - |
snov
O uporabniškem vmesniku za izbiro naprave za shranjevanje
Xbox 360 ima več naprav za shranjevanje, vključno s trdim diskom in pomnilniško enoto. Pri shranjevanju podatkov za igre itd., Xbox 360 je standardno opremljen z uporabniškim vmesnikom (uporabniški vmesnik), ki vam omogoča, da izberete, v katero napravo želite shraniti podatke. (Glej sliko zgoraj)
V tem vzorcu uporabimo ta uporabniški vmesnik za pridobivanje ciljne poti.
Dodajanje komponente storitev za igre
Uporabniški vmesnik za izbiro naprave za shranjevanje deluje asinhrono z dejansko igro. Če želite to doseči, morate dodati storitev igre in nastaviti, da storitev igre poganja uporabniški vmesnik za izbiro naprave za shranjevanje.
// 非同期処理を行うためのゲームサービスコンポーネントを追加
this.Components.Add(new GamerServicesComponent(this));
GamerServicesComponent
gradbenik
Ustvarite primerek GamerServicesComponent za upravljanje storitve za igralce.
igra | Igra | Ta komponenta in z njo povezan razred igre. |
Začnite prikazovati uporabniški vmesnik izbire naprave za shranjevanje
Če želite prikazati uporabniški vmesnik za izbiro naprave za shranjevanje, pokličite metodo »Guide.BeginShowStorageDeviceSelector« v načinu posodobitve. Vendar pa uporabniški vmesnik za izbiro naprave za shranjevanje ne bo prikazan v času klicanja te metode, ampak ga bo poklicala storitev igre, ki ste jo pravkar dodali.
Prvi argument metode Guide.BeginShowStorageDeviceSelector določa metodo, ki bo poklicana, ko je naprava izbrana v uporabniškem vmesniku za shranjevanje izbirnika naprav. To metodo morate določiti sami (glejte naslednji razdelek).
Drugi argument lahko nastavite na poljubne podatke. Če želite po izbiri naprave za shranjevanje uporabiti nekatere podatke, nastavite ta parameter na svoje podatke.
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
Guide.BeginShowStorageDeviceSelector
metoda
Sproži postopek prikaza uporabniškega vmesnika za izbiro naprave za shranjevanje. Ta operacija se izvaja asinhrono s procesom igre.
Callback | AsyncCallback | Nastavi metodo, ki se pokliče po izbiri naprave za shranjevanje. |
država | Predmet | Nastavite svoje podatke, ki jih želite uporabiti za asinhrono obdelavo. |
Mimogrede, ta uporabniški vmesnik za izbiro naprave za shranjevanje ni prikazan, ker je samodejno izbran, če je priključena samo ena naprava. Prav tako ni prikazan v sistemu Windows.
Način obdelave po izbiri naprave za shranjevanje
Metoda, določena v metodi Guide.BeginShowStorageDeviceSelector, je določena tako, da sprejme 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;
}
}
}
Ta metoda se prikliče, ko končate postopek izbire naprave v uporabniškem vmesniku za shranjevanje izbire naprave.
Napravo za shranjevanje lahko prejmete tako, da rezultat, ki ga posreduje argument (IAsyncResult), posredujete argumentu »Guide.EndShowStorageDeviceSelector«. Če prekličete izbor, bo vrnjena null.
Guide.EndShowStorageDeviceSelector
metoda
Prikaže uporabniški vmesnik za izbiro naprave za shranjevanje in prejme napravo za shranjevanje.
asyncResult | IAsyncResult | Posredujte rezultat izbire naprave za shranjevanje. |
Vrnjene vrednosti | Naprava za shranjevanje | Izbrana naprava za shranjevanje. Če je izbor preklican, se vrne null. |
Preverite, ali je naprava dejansko povezana z lastnostjo »StorageDevice.IsConnected«, in odprite vsebnik z metodo »StorageDevice.OpenContainer«. Argument metode StorageDevice.OpenContainer je ime vsebnika. To ime označuje vsebnik, v katerem so shranjeni podatki.
StorageDevice.IsConnected
lastnost
Vrne true, če je naprava uspešno povezana, v nasprotnem primeru pa false.
StorageDevice.OpenContainer
metoda
Odpre vsebnik za shranjevanje z določenim imenom.
naslovIme | niz | Ime vsebnika. |
Vrnjene vrednosti | Posoda za shranjevanje | Pridobi vsebnik za shranjevanje z določenim imenom. |
Ko imate vsebnik, lahko uporabite lastnost StorageContainer.Path, da dobite pot, kjer je shranjena datoteka.
StorageContainer.Path
lastnost
Pridobi pot datoteke uporabnikove shranjene igre.
Upoštevajte, da je uporabniški vmesnik za izbiro naprave za shranjevanje asinhroni proces
V vzorcu, medtem ko je prikazan uporabniški vmesnik za izbiro naprave za shranjevanje, prešteje vsak okvir, da zagotovi, da deluje asinhrono in prikaže štetje. Če ga dejansko zaženete, lahko vidite, da se vrednost števca poveča v ozadju, tudi ko je prikazan uporabniški vmesnik za izbiro naprave.
Če dejansko ustvarjate igro, morate to upoštevati in ustaviti napredek igre, medtem ko izbirate napravo. Druga možnost je, da ustavite napredek, vendar nadaljujete z učinki in drugimi učinki zaslona. To območje je treba prilagoditi, da se ujema z dejansko igro.
Vse 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);
}
}
}