Depolama kapsayıcısının yolunu alın

Sayfa güncel :
Sayfa oluşturma tarihi :

özet

Seçili depolama aygıtı için depolama kapsayıcısı yolunu alır.

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

Çalışma ortamı

Önkoşullar

Desteklenen XNA Sürümleri
  • 2.0
Desteklenen Platformlar
  • Windows (XP SP2, Vista)
  • Xbox360 Bilgisayarı İçin Kullanın
Windows Gerekli Köşe Gölgelendiricisi Sürümü 1.1
Windows Gerekli Pixel Shader Sürümü 1.1

Çalışma ortamı

peron

Örnek ile nasıl çalışılır

Çalışıyor klavyeXbox 360 denetleyicisifare
Bir depolama aygıtı seçme A A -

madde

Depolama Aygıtı Seçimi Kullanıcı Arabirimi Hakkında

Xbox 360, bir sabit sürücü ve bir bellek birimi dahil olmak üzere birden fazla depolama cihazına sahiptir. Oyunlar vb. için veri kaydederken, Xbox 360 standart olarak verileri hangi cihaza kaydedeceğinizi seçmenize olanak tanıyan bir kullanıcı arayüzü (kullanıcı arayüzü) ile birlikte gelir. (Yukarıdaki şekle bakın)

Bu örnekte, hedef yolu almak için bu kullanıcı arabirimini kullanırız.

Oyun Hizmetleri Bileşeni Ekleme

Cihaz seçimi kaydetme kullanıcı arayüzü, gerçek oyunla eşzamansız olarak çalışır. Bunu başarmak için bir oyun hizmeti eklemeniz ve oyun hizmetinin kaydetme cihazı seçimi kullanıcı arayüzünü çalıştırmasını sağlamanız gerekir.

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

GamerServicesComponent Oluşturucu

Oyuncu hizmetini işlemek için bir GamerServicesComponent örneği oluşturun.

oyun Oyun Bu bileşen ve ilişkili oyun sınıfı.

Depolama aygıtı seçim kullanıcı arabirimini görüntülemeye başlayın

Cihaz seçimi kaydetme kullanıcı arabirimini görüntülemek için Update yönteminde "Guide.BeginShowStorageDeviceSelector" yöntemini çağırın. Ancak, kaydetme cihazı seçimi kullanıcı arayüzü bu yöntem çağrıldığında görüntülenmeyecek, ancak az önce eklediğiniz oyun hizmeti tarafından çağrılacaktır.

Guide.BeginShowStorageDeviceSelector yönteminin ilk bağımsız değişkeni, Aygıtı Kaydet Seçici kullanıcı arabiriminde aygıt seçildikten sonra çağrılacak yöntemi belirtir. Bu yöntemi kendiniz tanımlamanız gerekir (sonraki bölüme bakın).

İkinci bağımsız değişken herhangi bir veriye ayarlanabilir. Bir depolama aygıtı seçtikten sonra bazı verileri kullanmak isterseniz, bu parametreyi kendi verilerinize ayarlayın.

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

Guide.BeginShowStorageDeviceSelector yöntem

Depolama aygıtı seçimi kullanıcı arabirimini görüntüleme işlemini başlatır. Bu işlem oyun işlemi ile eşzamansız olarak yapılır.

geri çağırma AsyncCallback (AsyncGeri Arama) Kaydetme aygıtı seçildikten sonra çağrılan yöntemi ayarlar.
devlet Nesne Eşzamansız işleme için kullanmak üzere kendi verilerinizi ayarlayın.

Bu arada, bu kaydetme cihazı seçimi kullanıcı arayüzü görüntülenmez, çünkü yalnızca bir cihaz bağlıysa otomatik olarak seçilir. Ayrıca Windows'ta görüntülenmez.

Bir depolama aygıtı seçtikten sonra işleme yöntemi

Guide.BeginShowStorageDeviceSelector yönteminde belirtilen yöntem, bir IAsyncResult kabul edecek şekilde tanımlanır.

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

Bu yöntem, cihaz seçimini kaydetme kullanıcı arabiriminde cihaz seçim işlemini tamamladığınızda çağrılır.

Bağımsız değişken (IAsyncResult) tarafından geçirilen sonucu "Guide.EndShowStorageDeviceSelector" bağımsız değişkenine geçirerek bir kaydetme cihazı alabilirsiniz. Seçimi iptal ederseniz null değerinin döndürüleceğini unutmayın.

Guide.EndShowStorageDeviceSelector yöntem

Kaydetme cihazı seçimi kullanıcı arabirimini görüntüler ve kaydedilen cihazı alır.

asyncResult IAsyncResult Kaydetme cihazı seçim sonucunu geçin.
Dönüş Değerleri Depolama Cihazı Seçilen depolama aygıtı. Seçim iptal edilirse, null döndürülür.

Cihazın gerçekten "StorageDevice.IsConnected" özelliğine bağlı olup olmadığını kontrol edin ve "StorageDevice.OpenContainer" yöntemiyle kapsayıcıyı açın. StorageDevice.OpenContainer yönteminin bağımsız değişkeni kapsayıcının adıdır. Bu ad, verilerin depolandığı kapsayıcıyı tanımlar.

StorageDevice.IsConnected mülk

Aygıt başarıyla bağlanmışsa true döndürür; aksi takdirde false döndürür.

StorageDevice.OpenContainer yöntem

Belirtilen adla depolama kapsayıcısını açar.

titleName (Adı) dizgi Kapsayıcının adı.
Dönüş Değerleri Depolama Kabı Belirtilen ada sahip depolama kapsayıcısını alır.

Kapsayıcıyı aldıktan sonra, dosyanın depolandığı yolu almak için StorageContainer.Path özelliğini kullanabilirsiniz.

StorageContainer.Path mülk

Kullanıcının oyun kaydetme dosyasının dosya yolunu alır.

Depolama aygıtı seçimi kullanıcı arabiriminin zaman uyumsuz bir işlem olduğunu göz önünde bulundurun

Örnekte, cihaz seçimini kaydetme kullanıcı arabirimi görüntülenirken, zaman uyumsuz olarak çalıştığından emin olmak için her kareyi sayar ve sayıyı görüntüler. Gerçekten çalıştırırsanız, cihaz seçimi kullanıcı arayüzü görüntülenirken bile sayacın değerinin arka planda arttığını görebilirsiniz.

Eğer gerçekten bir oyun yapıyorsanız bunu göz önünde bulundurmanız ve bir cihaz seçerken oyunun ilerlemesini durdurmanız gerekiyor. Alternatif olarak, ilerlemeyi durdurmak, ancak efektlere ve diğer ekran efektlerine devam etmek isteyebilirsiniz. Bu alanın gerçek oyunla eşleşecek şekilde ayarlanması gerekir.

Tüm Kodlar

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