プレイテストとピア レビューでチェックすべき項目のチェックリスト
この文書は、http://xbox.create.msdn.com/en-us/resources/help/peer_review_evil_checklist で公開されている「The Evil Checklist for playtest/peer review」の参考訳です。
注意: このチェックリストは参考訳であり、マイクロソフトは翻訳の正確さを保証するものではありません。また、原文が更新された場合など、参考訳と原文の意味が異なる場合は常に原文が優先します。

注意: 現在公開されている各チェックリストの日本語訳版は、2012 年 3 月末時点における英文版の内容を反映しています。

併せて、以下の資料も参照ください。
「差し戻しの理由にはならない事例に関するチェックリスト」 (http://xbox.create.msdn.com/ja-JP/resources/help/peer_review_not_so_evil_checklist)
「フォーラムやピア レビューにおける法的な問題に対するアドバイス」(http://xboxforums.create.msdn.com/forums/t/37259.aspx)
「ピア レビューにおける言語に対する注意点」(http://xbox.create.msdn.com/ja-jp/home/faq/language_faq)

以下にピア レビューで差し戻しになった最も多い理由と、それを回避するためのテスト ケースを例として列挙します。これは、ピア レビューに提出する前に作成したゲームのテストを行うデベロッパーと、ピア レビューに参加するデベロッパー (以下、レビューアー) の双方を対象としており、ピア レビューに提出されたゲームのテスト方法、レビューの方法、考慮すべきケースの提案も記載しています。


ピア レビューで差し戻しと判断される最も多い理由

  • ゲームに、マイクロソフトが規定するレビュー規則によって定義されている禁止されているコンテンツが何らか含まれている
  • ゲームがどこかでクラッシュする (はっきりしない状況でのクラッシュも、レビューアーによって発見された場合は差し戻しとなる)
  • ゲームがハングする、またはハングしたように見える (はっきりしない状況で発生する場合も差し戻しとなる) もしくは、その他のゲームの不具合が生じる
  • ゲームをプレイできないコントローラーがある (たとえば、コントローラー #1 でしかプレイできない、またはコントローラー #2 でゲームを開始してメニューを操作できるが、ゲーム内ではそのコントローラーからの入力に反応しないなど) 購入画面を含むゲーム内のどの部分でも、ユーザーが使用中のコントローラーを別のコントローラーに切り替える必要がないようにしてください
  • 使用しているフォントが小さ過ぎて (一部のテレビで) テキストの重要な部分が読み取れない。テキストを使用する場合は、標準的なテレビで読むことができるように、14 ポイント以上のフォントを使用してください
  • セーフ領域が設定されておらず (一部のテレビで) 重要な情報やゲーム プレイの重要な部分が画面からはみ出してしまう
  • ゲームや宣伝の素材の表示が不適切で、あらゆる年齢層にふさわしいと言えない (スクリーン ショット、パッケージ画像など)
  • ゲームを体験するためのお試し版がない、またはお試し版がゲームを無料提供するための目的で誤って使用されている
  • ゲームが実際にはゲームではなく、ビデオ (単一または複数) のラッパーであり、Xbox LIVE インディーズ ゲーム (XBLIG) をビデオ提供サービスとして誤用している

レーティング/分類の問題

  • 1080p: バック バッファーを 1920x1080 以外に設定するゲームは、1080p をサポートしません。1280x720 は 1080p ではありません。1920x1080 に設定する場合は、Xbox 360 本体で 480i に自動調整されないことに注意してください。その場合は追加のコード パスが必要になります
  • オンライン プレイヤー: ゲームでオンライン データ共有 (レベル、ハイスコアなど) をサポートしている場合、そのゲームが 2 ~ 31 プレイヤー ゲームであるということを意味するわけではありません。Xbox Games ストアでこの分類が示されていれば、プレイヤーはマルチプレイヤー ゲームと勘違いをします。これは不合格の正当な理由になります。詳しくはこちらのスレッド(http://xboxforums.create.msdn.com/forums/p/44911/268666.aspx#268666 (英語)) を参照してください

テスト ケース

以下に示すテスト ケースは、上記のような問題を回避するための方法です。これらのテスト ケースは、各自が行うテスト手順の参考となるよう、ガイドラインやヒントとして提供されるものです。したがって、絶対に従わなければならないものでも、完全なテスト ケースの一覧でもありません。ここに提示しているすべてのテストで問題が発見されなくても、もし、レビューアーが他の問題を発見した場合は、ピア レビューでゲームが差し戻しになることは十分考えられますのでご注意ください。そのため、以下のテスト ケースを実施する際は、個々の工夫が必要となり、この一覧のみに頼らないようにしてください。

基本的なテスト

<テスト ケース 1> 複数コントローラーの対応
2 つ目 (または 3 つ目/4 つ目) のコントローラーでゲームを開始し、様々な状況でゲームがプレイできることを確認します。以下は、想定される状況の一例です。

  1. テスト中に、サインインしているプロフィールがない状態でコントローラー #1 を抜きます。(コントローラー #2 は Xbox LIVE インディーズ ゲームのメンバーシップを購入する際に使用したプロフィールでサインインしている状態)
  2. テスト中に、サインインしているプロフィールがない状態でコントローラー #1 を差し込みます。(コントローラー #2 Xbox LIVE インディーズ ゲームのメンバーシップを購入する際に使用したプロフィールではサインインしている状態)
  3. コントローラー #1 を差し込み、サインインします。その際、コントローラー #2 はサインインしていない状態とします。この状況で、ゲームがコントローラー #2 に対して無反応であってはならず、引き続きコントローラー #2 でプレイできなければなりません (ただし、最初にコントローラー #2 でサインインするように求めても良い)。
    その他に想定される複数コントローラーを使用した状況に可能な限り対応してください。
    (注意: ゲーム中にコントローラーが差し替えられる状況への対応は、必須ではありません。通常、プレイヤーは、 "START ボタンを押してください" または "メイン メニュー" が表示されている状態で、アクティブなコントローラーを明示的に指定します。)

マルチプレイヤー ゲームにおける複数コントローラーへの対応:

  1. さまざまなコントローラーの組み合わせで、マルチプレイヤー ゲームがプレイできることを確認します (例えばプレイヤー 1 と 2 がコントローラー 1 と 2 を使用していると想定しない)。
  2. 複数のプレイヤーによる同時プレイに対応しているゲームの場合は、追加のコントローラーを接続したままにして (このコントローラーでサインインした状態とサインインしていない状態の両方をテストします)、必要最低限のプレイヤー数でゲームをプレイします。ゲームで、この追加のコントローラーのゲームへの参加が強制されないことを確認します。

    コントローラーに関する注意事項に関しては、併せて<注意事項 6> コントローラーに関する注意事項も参照してください。

<テスト ケース 2> サインアウト

1 つ目のコントローラーで、Xbox LIVE インディーズ ゲームのメンバーシップを購入する際に使用したプロフィール (ゲーマータグ) でサインインし、2 つ目のコントローラーで、別のゲーマータグを使用してサインインします。

注意: 2 つ目のコントローラーを使用して、ゲームをプレイします。次に、ゲーム内のさまざまな場所 (メイン メニューやゲーム プレイの最中など) で、2 つ目のコントローラーのガイド ボタンを使用して、2 つ目のコントローラーからサインアウトします。ゲームがサインアウトを適切に処理していることを確認します。ゲーム内のさまざまな場所でサインアウトを繰り返し確認したほうがよい場合もあります。

注意: "テスト ケース 2" のテストを容易にするために、2 つ目のプロフィールは (Xbox Live 対応ではない) オフライン プロフィールを使用するか または、Xbox LIVE インディーズ ゲームのメンバーシップを購入する際に使用したプロフィール (ゲーマータグ) を使用する必要があります。これは、2 つ目のプロフィールが Xbox LIVE インディーズ ゲーム メンバーシップと紐付いていないプロフィールだった場合、ゲームを開始できないためです。どうしてもこのようなプロフィールを使用したい場合は、最初に 2 つ目のプロフィールをサインアウトして状態にしてから、1 つ目のプロフィールを使用してゲームを開始する「時間差サインイン」を行う必要があるため、手順が煩雑になります。(ゲームが既に開始されている場合) まず、「START ボタンを押して開始してください」というゲームの開始画面が表示されたら、2 つ目のコントローラーを使用して、ここでようやく 2 つ目のプロフィールでサインインします。その後、2 つ目のコントローラーで [START] ボタンを押して、そのコントローラーでゲームをプレイします。

注意: この "時間差サインイン" が必要となるのは、2 つ目のプロフィールが Xbox LIVE インディーズ ゲーム メンバーシップと紐付いていないプロフィールだった場合のみです。オフラインのプロフィールまたは Xbox LIVE インディーズ ゲーム メンバーシップが紐付いているプロフィールの場合は、この "時間差サインイン" は不要です。

<テスト ケース 3> ストレージ デバイスの対応

  1. ストレージ デバイスとしてハード ディスクとメモリー ユニットの両方を接続した状態でゲームを開始し、ガイドに表示される指示に従い、いずれかを選択します。その後、ゲームが正しく実行されることを確認します。
  2. 問題なくゲームが実行されたら、もう一度ゲームを実行し直します。その際、ストレージの選択を行う画面で [B] ボタンを押してキャンセルします。(つまり、ストレージ デバイスを選択しません) ゲームがこの操作を適切に処理することを確認します。たとえば、デバイスを選択する必要があるというメッセージが示され、選択画面が再度表示されるか、または保存せずにゲームが続行します (当然ながら、クラッシュしてはいけません)
    高度なテスト: 選択画面をキャンセルした後にゲームで何らかのメッセージが表示される場合、このメッセージが、接続しているすべてのコントローラーの入力に応答することを確認します。

<テスト ケース 4> ストレージ デバイスの取り外し

テスト ケース 3 で問題が発生しない場合は、ストレージ デバイスとしてメモリー ユニットを選択し、ゲームの途中でメモリー ユニットを取り外します。次に、セーブ データの書き込みやユーザー データの読み込みなどが行われる操作を実行し、ストレージ デバイスが取り外されたことによって生じたエラーが、適切に処理されることを確認します。

<テスト ケース 5> 画面設定、フォント サイズおよびセーフ領域

テレビでサポートされているさまざまな画面設定でゲームを開始します。ゲームがクラッシュしたり、ゲームのプレイに必要な情報がセーフ領域外に描画されていないことを確認します (重要な情報がセーフ領域の外側に描画される、フォントが小さ過ぎて読み取れないなど)

<テスト ケース 6> Xbox Games ストア

Xbox LIVE にサインインしていない場合 (もしくはオフラインのプロフィールでサインインしている場合)、ゲームの完全版を購入するためにXbox Games ストアのページを表示しようとすると、例外が発生します。この例外が適切に処理されていない場合、ゲームがクラッシュします。例外処理が正しく行われていることをテストするには、オフラインのプロフィールでサインインするか、プロフィールを使用せずにサインインして (ゲームで許可されている場合)、お試し版の模擬モードでゲームを実行します。その後、完全版を購入するためのメニューが非表示になっていること、または、そのメニューを選択してもクラッシュしないことを確認します。

注意: このテストでは、保護者による制限などによって権限が制限されているプロフィール (お子様の Xbox LIVE アカウントなど) は使用しないでください。このようなアカウントでは、このテストで誘発しようとしている例外やクラッシュは発生しません。

<テスト ケース 7> ゲーム起動時の Xbox ガイド表示

ゲームを開始してすぐに Xbox ガイドを開きます (たとえば、ダッシュボードのゲーム ライブラリーからゲームを選択して実行し、そのゲームの起動中に、すぐにコントローラーのガイド ボタンを押します)。画面に表示されたガイドが何度かちらつきますが、ゲームの起動中に表示される Xbox LIVE インディーズ ゲームの説明画面 (青地の画面) からゲームの画面に切り替わった時点で、Xbox ガイドを閉じます。これによってクラッシュが発生するか確認します。また、別の画面 (キーボードまたはデバイスの選択) が表示されようとしているときに、Xbox ガイドを表示させようとした場合もクラッシュする可能性があります。Guide.IsVisible をチェックするだけではなく、常にダイアログを表示させるコードに対して、try/catch の処理を入れてください。

(自分で作成したゲームをテストしていて、実際にクラッシュが発生する場合は、これを回避する方法についてのやり取りが示されているこちらのスレッド (http://xboxforums.create.msdn.com/forums/p/19874/103843.aspx(英語)) を参照してください。

高度/特殊なテスト

<テスト ケース 8> スプライト フォントの問題

ゲームで、プレイヤーが何らかのテキストを入力する仕組みが用意されている場合 (ハイスコア リスト用にプレイヤー名を入力する場合など) は、非標準の記号や外国語の文字を入力してみてください。デベロッパーが選択したフォントがこの記号や文字をサポートしていない場合は、クラッシュする場合があります。
(注意: SpriteFont.Characters.Contains (char) を使用して、プレイヤーが入力したすべての文字が使用しているフォントでサポートされているかどうかを確認してください。)

<テスト ケース 9> 国や地域の問題

Xbox 360 のダッシュボードが英語以外の言語に設定されている状態で、ゲームを開始またはプレイして、特定の国や地域に固有のバグがないかどうかを確認します。

  1. 浮動小数点値の小数点記号として、言語および国や地域を英語/米国としている場合に使用される "." ではなく "," が使用される国や地域に関連付けられている言語に Xbox 360 を設定します。こうすることで、浮動小数点解析のバグがないかどうかを確認できます (下記の「注意事項 1」を参照)。このバグによって影響を受けるゲームは、さまざまな奇妙な動作を示します (たとえば、適切にゲームが起動しない、データの読み込み中のある時点でハングする、適切でないサイズですべてが描画されるなどの問題が発生しています) このテストに使用できる言語は、スペイン語、フランス語、ドイツ語などです。
  2. ゲームで、桁区切り記号を使用する書式設定された形式で数値が出力される場合は、桁区切り記号として、言語および国や地域を英語/米国としている場合に使用される "," ではなく、改行しないスペースが使用される国や地域に関連付けられている言語に Xbox 360 を設定します (たとえば "1,234,567" は "1 234 567" と表示されます)。次に、桁区切り記号が必要となるようにゲームで 1000 以上の数値が出力されるような操作を実行します。これによって、ゲームがクラッシュしないことを確認します (下記の「注意事項 4」を参照)
    改行しないスペースを区切り記号として使用すると思われる言語は、ロシア語、ポーランド語です。

<テスト ケース 10> ネットワーク/マルチプレイヤーの問題

Xbox LIVE に対応したマルチプレイヤー ゲームの場合の特殊なケースです。マルチプレイヤー ネットワーク セッションを確立した状態でゲームのポーズを試してみます (ゲーム独自のポーズ機能がある場合はそれを使用する方法と、それに加えて Xbox ガイドを開く方法の両方)。ゲームが、これらの操作を適切に処理できているか確認します。ゲームが実際にポーズする (ガイドが表示中にバックグラウンドでも続行されないケースも含む) 場合は、これが (少なくとも予期しない形で) 他のプレイヤーの妨げになってはなりません。さらに、しばらくの間ゲームをポーズ状態のままにした場合に、ネットワークのタイムアウトが発生することがあってはなりません (ネットワークのタイムアウトは、ゲームのポーズ中にネットワーク セッションの更新を忘れた場合に発生します)

<テスト ケース 11>ゲームに実装されている機能の確認

ゲームを提出する際に、デベロッパーはゲームに実装されている一連の機能を申告します。たとえば、ゲームが対応しているプレイヤー数、協力プレイへの対応、最大解像度、カスタム サウンドトラックの対応などが該当します。可能な限りこれらの申告されている機能がすべてそのとおりに実装され、機能しているかどうかを確認してください。
(注意: 実際に "カスタム サウンドトラック" に対応しているかどうかを確認するには、ゲームの実行中に Xbox 360 で (CD や音楽ライブラリーなどから) 音楽を再生してみます。ゲームの音楽が自動的にオフになり、サウンド エフェクトのみが再生されなければなりません。)

<テスト ケース 12> 画面の解像度

ゲームが、ベスト プラクティス ガイド (http://xbox.create.msdn.com/ja-JP/education/catalog/article/bestpractices_31 (日本語)) に従っていて、解像度が 1280x720 (720p) に設定される場合は、問題が報告されることはありません。ただし、ゲームで 1920x1080 (1080p) が使用されている場合は、コードに 640x480 を処理する特別なコード パスが含まれている必要があります。これは、Xbox 本体では、1080p をそのサイズにまで縮小できないためです。また、VGA ケーブルを使用しているユーザーは、特殊なアスペクト比でさまざまな解像度を設定できる点に注意してください。デベロッパーが、画面のサイズに応じて動作を変更するコードを記述した場合は、いずれかの VGA 解像度がテストされていない可能性があります。テストするには、ダッシュボードで 640x480 やその他の特殊な解像度に設定します。解像度とアスペクト比については(http://hardware.teamxbox.com/reviews/xbox-360/40/Xbox-360-VGA-HD-AV-Cable/p1/ (英語)) を参照してください。

<テスト ケース 13> 使用が制限されている用語

「実績 (Achievement)」や「リーダーボード (Leaderboard)」機能は、Xbox 360 向けのゲームが一般的に実装しているのに対して、Xbox LIVE インディーズ ゲームでは実装できないため、これらの機能や用語を使用しないでください。
詳細については(http://blogs.msdn.com/xna/archive/2008/12/12/creators-club-communiqu-11.aspx (英語)) を参照してください。また、代用できる用語については(http://xboxforums.create.msdn.com/forums/t/21124.aspx (英語)) のスレッドで行われている議論も参考してください。作成中のゲームやゲームの説明文、スクリーンショット、予告編映像などにこれらの用語が含まれていないことを確認してください。もし含まれている場合は、Xbox LIVE に不適切なゲームという理由で差戻ししてください。

<テスト ケース 14> Guide.SimulateTrialMode

レビュー時に Guide.SimulateTrialMode フラグがオンのままになっているゲームは、Xbox サービスには影響がなくても不合格にする必要があります。これは、レビューアーがすべてのコード パスをたどってクラッシュやハングまたは問題のあるコンテンツを調べることができないためです。詳しくはこちらのスレッド(http://xboxforums.create.msdn.com/forums/p/30287/224320.aspx#224320 を参照してください。 (英語))

<テスト ケース 15> メディア サーバーまたはファイル共有でのメディア ライブラリー API のテスト

ゲームでメディア ライブラリー API を使用して曲やアルバムを繰り返し処理する場合は、メディア サーバーなどの外部ファイル ストアに接続された Xbox 本体でテストする必要があります。API は最終的には復帰しますが、Xbox ハード ドライブや USB ドライブの場合と比べると桁違いの速度差があります。この構成では、エンド ユーザーにはゲームがハングまたはクラッシュしているように見えることがあります。


開発上の注意事項

以下の注意事項は、レビューアー向けのテスト ケースというよりは、実際にデベロッパーが遭遇してきた様々な事象を注意事項としてまとめたものです。これらの事象によって、ピア レビューの間に、修正が必要なバグが発覚したり、何らかの理由で再提出が必要になることがありました。よって、これらの注意事項は、レビューアーに向けたものというよりは、このチェックリストを使用して、ゲームの公開前にテストを行うデベロッパーに向けたものです。これらの注意事項だけではなく、インディーズ ゲームのベスト プラクティス ガイド (http://xbox.create.msdn.com/ja-JP/education/catalog/article/bestpractices_31 (日本語)) も併せて確認してください。

<注意事項 1> 浮動小数点数 (float 型) の変換

ゲームのセーブ データ (ゲーム データまたはセーブ ゲーム) にテキスト形式で表記した浮動小数点数を使用しており、読み込み時にテキスト表記から浮動小数点値に変換する必要がある場合は、言語および国や地域の設定に起因する問題が発生しないように注意する必要があります (上記の「テスト ケース 9」は、これによって生じるバグを見つけ出そうとするものです)。
予備知識: 国や地域によってさまざまな文字が小数点記号として使用されています。たとえば、米国と英国では、ドット "." が使用されています (例: "1.5") が、スペインやドイツでは、カンマ "," が使用されています (例: "1,5")

"value.ToString ()" を使用して浮動小数点数を文字列に変換する場合、または、"float.Parse (text)" を使用してテキストを浮動小数点数に変換する場合、.NET Framework では、常に、国や地域の設定に対応する小数点記号を使用します。Xbox 360 では、国や地域は Xbox 360 のダッシュボードで設定されている言語によって定義されます。1/2 (1 ÷ 2) という計算式に対して "value.ToString ()" を実行した場合、英語に設定されている Xbox 360 では、結果の文字列は "0.5" になりますが、スペイン語に設定されている Xbox では、結果の文字列は "0,5" になります。同様に、"float.Parse (text)" でも、現在の言語に対応する小数点記号が想定されるため、例えば、スペイン語に設定されている Xbox 360 (小数記号として "," が想定される) でテキスト "0.5" が解析された場合も、結果は不正確になります。

これは、かなりの確率でバグを引き起こします。自分が作成したゲームで "." を使用するデータを実装していて、そのゲームがスペイン語に設定された Xbox でプレイされると仮定してみてください。データの読み込みに失敗するか、少なくとも予期しない結果が発生します。または、自分が作成したゲームを、プレイヤーがスペイン語に設定された Xbox 360 でプレイし、そのゲームを保存すると仮定してみてください。セーブ ゲームでは、"," が小数点記号として使用されます。ここで、プレイヤーが、Xbox 360 の言語設定を英語に変更してゲームを再起動するとします。セーブ ゲームが読み込まれるときに、パーサーは、実際にデータに含まれている "," と対応しない "." を小数点記号として想定するため、結果として読み込みエラーが発生します。

そのため、value.ToString () および float.Parse (text) だけの呼び出しは、いかなる状況でも実行しないようにする必要があります。

代わりに、浮動小数点数をテキストに変換する必要がある場合は必ず value.ToString (CultureInfo.InvariantCulture) を使用し、取得したテキストを浮動小数点数に変換する必要がある場合は必ず float.Parse (text, CultureInfo.InvariantCulture) を使用してください。

こうすると、常にドット "." が小数点記号として使用されて、データが意図したとおりに記述および変換されるという結果を期待できます。

この場合、当然ながら、ゲームで実装するすべてのデータでも、ドット "." を小数点記号として使用されるようにする必要があります。

(注意: 文字列と浮動小数点数の "+" 演算子による結合は value.ToString () の使用に相当します。そのため、データの保存時には、"テキスト" + floatValue + "テキスト" のようにしないようにする必要があります。代わりに、"テキスト" + floatValue.ToString (CultureInfo.InvariantCulture) + "テキスト" を使用します。

また、当然のことながら、上記はデータの保存時にのみ当てはまります。画面に表示するために浮動小数点数をテキストに変換する場合は、引き続き通常の value.ToString () を使用し、各プレイヤーに、それぞれの国と地域に応じた正しい小数点記号を使用して値が表示されるようにする必要があります。

また、XMLSerializer は、この問題の影響を受けない点に注意してください。これは、浮動小数点値を手動で記述および解析する場合にのみ配慮する必要がある注意点です。

<注意事項 2> 保存されたデータが破損する (既存のファイルを、より短いデータで上書きした後に余分な容量を切り捨てなかった場合)

データを記述するために FileMode.OpenOrCreate を使用してファイルを開いたときに、そのファイルが既に存在している場合、そのファイルのデータは切り捨てられず、単にそのファイルが開くだけです。その後、このファイルに記述したデータが、ファイルに既に含まれていたデータよりも短い場合、ファイルの終わりには、前のデータが残ったままになります。保存形式によっては、その後のデータの読み込み時に、残っていた "古い" データによって読み込みエラーが発生した場合、保存されたデータが破損する可能性があります。たとえば、セーブ データがシリアル化された XML の場合などに発生します (実際の新しい XML データの末尾以降に、古いデータの余分な XML タグが残るため)。実際、XNA Game Studio のドキュメント内の XML シリアル化の例で、FileMode.OpenOrCreate を使用するように説明されていますが、残念ながら、上記の問題が発生するためお勧めできません。代わりに、FileMode.Create を使用する必要があります (これにより、ファイルが存在しない場合はファイルが作成され、既に存在している場合はデータが切り捨てられるため、データを記述した後は、新しいデータのみがファイルに残るようになります)。このフォーラム内 (http://xboxforums.create.msdn.com/forums/p/23149/124478.aspx#124478 (英語)) での Shawn 氏の意見によれば、Xbox と Zune のプログラミングではこれで十分です。別のフォーラム内(http://xboxforums.create.msdn.com/forums/p/22451/120090.aspx (英語)) で推奨されている方法である "safe save" は必須ではありませんが、Windows でのプログラミングの場合は、この方法をお勧めします。

(この注意事項に関連したバグを見つける方法を説明できる最適なテスト ケースはありません。これについてテストする場合は、ゲームで強制的にデータの保存と呼び出しを繰り返す方法をお勧めします。たとえば、保存が必要になる何らかの操作を実行し、ゲームを再起動して読み込みを強制する処理を何度か繰り返します。)

<注意事項 3> ストレージ デバイスの処理

不適切なストレージ デバイスの選択処理は、ゲームがピア レビューで差し戻しになる主な理由の 1 つです。デベロッパーは、ストレージ デバイスの選択について、以下の事実を認識しておく必要があります。

  1. デバイスの選択画面は、複数のストレージ デバイス (ハード ディスクと MU など) がある Xbox 360 でのみ表示されます。Xbox 360 にストレージ デバイスが 1 つしかない場合、画面は表示されず、そのデバイスが自動的に選択されます。そのため、さまざまな選択画面に固有の状況をテストするには、実際に MU が必要になります。
  2. プレイヤーは、 [B] ボタンでデバイスの選択画面をキャンセルできます。つまり、デバイスが選択されずにゲームを進めることができます。ゲームは、このような状況を正しく処理する必要があります。適切に処理されない場合、読み込みまたは保存を実行しようとした際にゲームがクラッシュします。
  3. プレイヤーが MU を選択した場合、ゲームの途中でその MU を取り外すことができます。ゲームがこのような状況を正しく処理できない場合、このデバイスからの読み込みまたは保存を実行しようとした際にゲームがクラッシュします。

<注意事項 4> 桁区切り記号を使用した数値の出力

1,000 以上の数値を、桁区切り記号を含む形式で出力しようとしたときに、Xbox 360 で現在設定されている国や地域で使用されている桁区切り記号が SpriteFont に含まれていない場合、ゲームがクラッシュする可能性があります。

(予備知識) この注意事項は、数値形式における国や地域ごとの相違によって生じるという点に限って言えば、注意事項 1 と関連しています。Xbox 360 の国や地域の設定によっては、桁区切り記号の文字が、言語を英語、国や地域を米国に設定した際に使用される "," とは異なる場合があります。一部の国や地域では、改行しないスペースが桁区切り記号として使用されることもあります。これは、通常のスペースのように見えますが、ASCII 値は 32 (0x20) ではなく、160 (0xa0) です。そのため、言語と国や地域の設定が英語/米国の場合に "1,234,567" と示される数値が、別の国や地域では "1 234 567" と示される場合があります。ここで、SpriteFont に改行しないスペースが含まれていない場合 (SpriteFont の作成時に、文字範囲を 128 までしか指定しなかったために、ASCII 値 160 が含まれていない場合など)、このような国や地域に設定された Xbox 360 で 1000 以上の書式設定された数値を描画しようとすると、ゲームがクラッシュします。この問題を回避するには、SpriteFont に必要な文字 (160/0xa0) を含めるか、または、数値の書式設定時に、描画の際に使用する SpriteFont でサポートされている文字のみを生成する形式を使用するようにします。(もしくはこの両方の方法を適用します)

<注意事項 5> PlayerIndex を検出する前の Guide.BeginShowMessageBox の使用

Guide.BeginShowMessageBox の呼び出しには、PlayerIndex を指定する必要があります。これは、指定されたインデックスのコントローラーでしか、表示されるメッセージ ボックスを制御できないことを意味しています。さらに、正しい PlayerIndex を検出しておかないと、このメソッドを使用してメッセージ ボックスを開けないことも意味しています。通常、このような検出は、"START ボタンを押してプレイを開始してください" 画面などを介して実行されます。そのため、ゲームを制御しているコントローラーのインデックスを検出する前に、Guide.BeginShowMessageBox を使用しないでください。また、間違ったインデックスを指定した場合、プレイヤーはメッセージ ボックスを制御できなくなります (ゲームが入力に応答しなくなり、ハングしたように見えます) 。

この問題は、次のような場合に確認できます。最初にストレージの選択画面が表示され (このストレージ選択画面はプレイヤーのインデックスを区別しません)、プレイヤーがキャンセルすると、ゲームはメッセージ ボックスを表示しようすると仮定しましょう (たとえば、ゲームをそのまま進行した場合セーブ機能は無効であること、またはゲームを進行するためにはデバイスを選択する必要があることを通知するため、もしくはデバイスを選択するか、保存せずに続行するかをプレイヤーに尋ねるため)。PlayerIndex が検出される前にこれらのようなメッセージ ボックスを表示しているのであれば、ほとんどの場合 PlayerIndex.One が指定されており、コントローラー #1 以外からの入力に対し、メッセージ ボックスが応答しなくなります。

<注意事項 6> コントローラーに関する注意事項

次に、レビューで不合格となった、コントローラーに関する問題をいくつか示します。デベロッパーはこれらの問題に注意してください。

  1. 有線のギターおよびドラム キットは、多くの場合コントローラー #1 および #2 として接続され、自動ログイン プロフィールを使用します。ユーザーが通常のコントローラーをコントローラー #3 以上に接続してプレイするときに、ログインできない場合があります。
  2. 一部のコントローラーのスティックは、動かされていなくても [0,0] に登録されず、ギター (またはその他のコントローラー) では、ワーミー バーやチルトにより、右スティックが! = [0,0] に登録されます。したがって、そのようなコントローラーやギターを使用すると、アクティブなコントローラーを特定するために、ボタン押下のポーリングだけでなく、スティックのポーリングを行う場合に、問題が生じることがあります (http://xboxforums.create.msdn.com/forums/t/40701.aspx (英語)) を参照してください。そのため、一般的なアドバイスとして、このような処理を実行しないことをお勧めします。代わりに、[START] ボタンと [A] ボタンが押されたかどうかをチェックしてアクティブなコントローラーを特定する開始画面を作成してください。
  3. "for (PlayerIndex p = PlayerIndex.One; p<PlayerIndex.Four; p++)" のようなコードでの条件の誤りに注意してください。この条件では、コントローラー #4 を使用できないことになります。これが原因でコントローラー #4 に応答しないゲームがいくつかありました。すべてのコントローラーが接続された本体でテストしてください。(正しいコードは、条件に "<" ではなく "<=" を使用します。)
  4. マルチプレイヤー ゲームに関しては、プレイせずに見ていたいだけのユーザーがいる場合があり、また、有線ギターやドラム キットなどが接続されたままになっている場合もあります。そのため、マルチプレイヤー ゲームでは、コントローラーが接続されているからといって、そのすべてがゲームに参加したいプレイヤーであると単純に想定することはできません (そのコントローラーでプロフィールにログインしている場合も含む)。したがって、接続されているすべてのコントローラーをそのまま強制的にマルチプレイヤー ゲームのプレイヤーにすることはできません。その代わりに、ゲームへの参加を望んでいるアクティブなコントローラーを選別するために、"参加する場合は [A]、参加しない場合は [B]、プレイする場合は [START] を押してください" というような UI を実装し、各コントローラーがプレイするかどうかを選択できるようにします。ゲームを開始したコントローラーはプレイを望んでいると想定してよいので、必要な場合はそのコントローラーをすぐに含めることができます。
  5. プレイヤーが使用しているコントローラーでログインしたプロフィールでは実行できない操作をさせるために、別のコントローラーでログインしているプロフィールを使用しないでください。これはセキュリティ機能の抜け道となり、プレイヤーを混乱させることにもなります。一般に、PlayerIndex を必要とする操作を実行する場合は、その操作を開始または実行するコントローラーの PlayerIndex のみを使用します。その操作が、そのコントローラーでログインしたプロフィールでは実行できない (そのプロフィールが必要な権限を持たない、またはログインしているプロフィールがない) 場合は、プレイヤーにわかりやすい方法で適切に対処します。(たとえば、メニュー項目を無効にする、情報メッセージを表示する、ログイン ダイアログを表示する、などの方法をとります。)

    例えば、これを無視したゲームの実例として、ゴールド メンバーシップのプロフィールを持たないコントローラーでプレイしているプレイヤーを、すべてのネットワーク アクセスで、たまたまゴールド メンバーシップのプロフィールでログインしていた 2 つ目のコントローラーの PlayerIndex を使用してオンライン マッチに参加させてしまうという実装がありました。このようなことは行わないでください。

    XNA Game Studio Connect での 8 分間のお試し版の画面は、開発を目的としたエミュレーションです。何のチェックも行われずにだれもがゲームを購入でき、開発者の管理の範囲外にあります。これを理由に不合格にしないでください。リリース後、Xbox サービスで適切なチェックが行われます。

このチェックリストと併せて、「差し戻しの理由にはならない事例に関するチェックリスト」を参照されることをお勧めします。このリストは、ピア レビューでゲームを不合格にする理由にはなりませんが、ゲームの品質を向上させるために、検討または修正すべき重要な事項を挙げています。

本件に関するご質問は、Xbox LIVE インディーズ ゲーム フォーラム (Xbox LIVE インディーズ ゲーム開発全般) への投稿、もしくは creators@microsoft.com までメールでお問い合わせください。

      var gDomain='m.webtrends.com'; var gDcsId='dcschd84w10000w4lw9hcqmsz_8n3x'; var gTrackEvents=1; var gFpc='WT_FPC'; /*<\/scr"+"ipt>");} /*]]>*/
      DCSIMG