Abrufen des Pfads des Speichercontainers

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Zusammenfassung

Ruft den Speichercontainerpfad für das ausgewählte Speichergerät ab.

ストレージコンテナのパスを取得する

Betriebsumgebung

Voraussetzungen

Unterstützte XNA-Versionen
  • 2.0
Unterstützte Plattformen
  • Windows (XP SP2, Vista)
  • Xbox360
Erforderliche Vertex-Shader-Version für Windows 1.1
Erforderliche Pixel-Shader-Version für Windows 1.1

Betriebsumgebung

Bahnsteig

So arbeiten Sie mit der Stichprobe

Funktioniert mit TastaturXbox 360 ControllerMaus
Auswahl eines Speichergeräts Ein Ein -

Substanz

Informationen zur Benutzeroberfläche für die Auswahl von Speichergeräten

Die Xbox 360 verfügt über mehrere Speichergeräte, darunter eine Festplatte und eine Speichereinheit. Beim Speichern von Daten für Spiele usw. ist die Xbox 360 standardmäßig mit einer Benutzeroberfläche ausgestattet, auf der Sie auswählen können, auf welchem Gerät Daten gespeichert werden sollen. (Siehe Abbildung oben)

In diesem Beispiel verwenden wir diese Benutzeroberfläche, um den Zielpfad abzurufen.

Hinzufügen einer Spieldienstekomponente

Die Benutzeroberfläche für die Auswahl des Speichergeräts funktioniert asynchron mit dem eigentlichen Spiel. Um dies zu erreichen, müssen Sie einen Spieldienst hinzufügen und den Spieldienst die Benutzeroberfläche für die Geräteauswahl steuern lassen.

// 非同期処理を行うためのゲームサービスコンポーネントを追加
this.Components.Add(new GamerServicesComponent(this));

GamerServicesComponent Konstruktor

Erstellen Sie eine Instanz von GamerServicesComponent, um den Gamer-Dienst zu verarbeiten.

Spiel Spiel Diese Komponente und die zugehörige Spielklasse.

Starten der Benutzeroberfläche für die Auswahl des Speichergeräts

Um die Benutzeroberfläche für die Auswahl des Speichergeräts anzuzeigen, rufen Sie die Methode "Guide.BeginShowStorageDeviceSelector" in der Update-Methode auf. Die Benutzeroberfläche für die Auswahl des Speichergeräts wird jedoch zum Zeitpunkt des Aufrufs dieser Methode nicht angezeigt, sondern von dem Spieldienst aufgerufen, den Sie gerade hinzugefügt haben.

Das erste Argument der Guide.BeginShowStorageDeviceSelector-Methode gibt die Methode an, die aufgerufen wird, nachdem das Gerät in der Benutzeroberfläche der Geräteauswahl zum Speichern ausgewählt wurde. Sie müssen diese Methode selbst definieren (siehe nächster Abschnitt).

Das zweite Argument kann auf beliebige Daten gesetzt werden. Wenn Sie nach der Auswahl eines Speichergeräts einige Daten verwenden möchten, setzen Sie diesen Parameter auf Ihre eigenen Daten.

// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);

Guide.BeginShowStorageDeviceSelector Methode

Initiiert den Prozess zum Anzeigen der Benutzeroberfläche für die Auswahl des Speichergeräts. Dieser Vorgang wird asynchron mit dem Spielprozess ausgeführt.

Rückruf AsyncCallback Legt die Methode fest, die aufgerufen wird, nachdem das Speichergerät ausgewählt wurde.
Zustand Objekt Legen Sie Ihre eigenen Daten fest, die für die asynchrone Verarbeitung verwendet werden sollen.

Übrigens wird diese Benutzeroberfläche für die Auswahl des Speichergeräts nicht angezeigt, da sie automatisch ausgewählt wird, wenn nur ein Gerät angeschlossen ist. Es wird auch unter Windows nicht angezeigt.

Verarbeitungsmethode nach Auswahl eines Speichergeräts

Die in der Guide.BeginShowStorageDeviceSelector-Methode angegebene Methode ist so definiert, dass sie ein IAsyncResult akzeptiert.

/// <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;
        }
    }
}

Diese Methode wird aufgerufen, wenn Sie den Geräteauswahlprozess in der Benutzeroberfläche zum Speichern der Geräteauswahl abgeschlossen haben.

Sie können ein Speichergerät erhalten, indem Sie das vom Argument übergebene Ergebnis (IAsyncResult) an das Argument von "Guide.EndShowStorageDeviceSelector" übergeben. Beachten Sie, dass null zurückgegeben wird, wenn Sie die Auswahl aufheben.

Guide.EndShowStorageDeviceSelector Methode

Zeigt die Benutzeroberfläche für die Auswahl des Speichergeräts an und empfängt das Speichergerät.

asyncErgebnis IAsyncErgebnis Übergeben Sie das Ergebnis der Geräteauswahl zum Speichern.
Rückgabewerte Speichergerät Das ausgewählte Speichergerät. Wenn die Auswahl aufgehoben wird, wird null zurückgegeben.

Überprüfen Sie, ob das Gerät tatsächlich mit der Eigenschaft "StorageDevice.IsConnected" verbunden ist, und öffnen Sie den Container mit der Methode "StorageDevice.OpenContainer". Das Argument für die StorageDevice.OpenContainer-Methode ist der Name des Containers. Dieser Name identifiziert den Container, in dem die Daten gespeichert sind.

StorageDevice.IsConnected Eigentum

Gibt true zurück, wenn das Gerät erfolgreich verbunden wurde, andernfalls false.

StorageDevice.OpenContainer Methode

Öffnet den Speichercontainer mit dem angegebenen Namen.

titleName Schnur Der Name des Containers.
Rückgabewerte Lagercontainer Ruft den Speichercontainer mit dem angegebenen Namen ab.

Sobald Sie über den Container verfügen, können Sie die StorageContainer.Path-Eigenschaft verwenden, um den Pfad abzurufen, in dem die Datei gespeichert ist.

StorageContainer.Path Eigentum

Ruft den Dateipfad der Spielspeicherdatei des Benutzers ab.

Beachten Sie, dass die Benutzeroberfläche für die Auswahl des Speichergeräts ein asynchroner Prozess ist

Im Beispiel wird zwar die Benutzeroberfläche für die Auswahl des Speichergeräts angezeigt, aber jeder Frame wird gezählt, um sicherzustellen, dass er asynchron ausgeführt wird, und die Anzahl wird angezeigt. Wenn Sie es tatsächlich ausführen, können Sie sehen, dass der Wert des Indikators im Hintergrund zunimmt, auch wenn die Benutzeroberfläche für die Geräteauswahl angezeigt wird.

Wenn Sie tatsächlich ein Spiel erstellen, müssen Sie dies berücksichtigen und den Fortschritt des Spiels stoppen, während Sie ein Gerät auswählen. Alternativ können Sie den Fortschritt anhalten, aber die Effekte und andere Bildschirmeffekte fortsetzen. Dieser Bereich muss an das tatsächliche Spiel angepasst werden.

Alle Codes

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);
        }
    }
}