WisdomSoft - for your serial experiences.

9.2 ガイドの表示

ゲーマーサービスに対応しているゲームは、プログラムからガイド画面を制御できます。

9.2.1 プログラムからガイドを制御する

キーボードの Home キーや、Xbox 360 コントローラのガイドボタンからガイドを表示することができましたが、プログラムからガイドの表示を制御することもできます。ネットワークにサインインすることが必須のゲームで、ユーザーがサインインしていない状態であれば、サインイン促すためにガイドを自動的に表示させるといった使い方ができます。

ガイドを制御するには Microsoft.Xna.Framework.GamerServices.Guide クラスを使います。ガイドはアプリケーションに対して常に 1 つしか存在しないため静的クラスです。

Microsoft.Xna.Framework.GamerServices.Guide クラス
public static class Guide

ガイドには、メッセージの送信やフレンドの表示、ゲーマーカードなど、いくつかの画面がありますが、この場ではサインイン画面を表示する ShowSignIn() メソッドを使います。他の画面を表示するメソッドも、同じように Show~() という名前を持ちます。

Guide クラス ShowSignIn() メソッド
public static void ShowSignIn (
         int paneCount,
         bool onlineOnly
)

paneCount パラメータには、サインインするユーザーの数を指定します。このパラメータに指定できる有効な整数は 1、2、4 のいずれかです。Xbox 360 の場合、ここに 4 を指定することで、上下左右に画面が分割された 4 人までのサインインを同時に行える画面が表示されます。このパラメータは Windows 用のゲームでは機能せず、常に 1 人用のサインイン画面が表示されます。onlineOnly パラメータには、LIVE 接続できるアカウントだけを表示するかどうかを指定します。

ガイドがすでに表示されている状態で、ガイドの表示を要求すると例外が発生します。ガイドが表示されているかどうかは IsVisible プロパティで調べられます。

Guide クラス IsVisible プロパティ
public static bool IsVisible { get; set; }

このプロパティが true の場合、ガイドが表示されている状態です。

コード1 (Win, Xbox 360)
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.GamerServices;

public class Test : Game
{
    public static void Main(string[] args)
    {
        using (Game game = new Test()) game.Run();
    }

    private GraphicsDeviceManager graphicsDeviceManager;

    public Test()
    {
        graphicsDeviceManager = new GraphicsDeviceManager(this);
        Components.Add(new GamerServicesComponent(this));
    }

    protected override void Update(GameTime gameTime)
    {
        GamePadState state = GamePad.GetState(PlayerIndex.One);
        if (!Guide.IsVisible)
        {
            if (state.Buttons.A == ButtonState.Pressed)
                Guide.ShowSignIn(1, false);
        }

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.White);
        base.Draw(gameTime);
    }
}
実行結果
コード1 実行結果

コード1では、コントローラの A ボタンを押すとサインイン画面が表示されます。A ボタンが押されている間、連続して ShowSignIn() メソッドが呼び出されてしまうのを避けるため、事前に IsVisible プロパティの値を調べ、ガイドが表示されていなければ ShowSignIn() メソッドを呼び出す仕組みになっています。