<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ひにけにXNA : XNA 3.0</title><link>http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx</link><description>Tags: XNA 3.0</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>デバッグコマンド</title><link>http://blogs.msdn.com/ito/archive/2009/01/22/debugcommand.aspx</link><pubDate>Fri, 23 Jan 2009 10:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9372299</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9372299.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9372299</wfw:commentRss><description>&lt;P&gt;注:今回紹介するコンポーネントは&lt;A href="http://blogs.msdn.com/ito/archive/2008/12/27/debug-components-sample.aspx" mce_href="http://blogs.msdn.com/ito/archive/2008/12/27/debug-components-sample.aspx"&gt;デバッグサンプル&lt;/A&gt;に入っています。&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=debugcmd src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/DebugCommand_568/debugcmd_3.png" width=438 height=373 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/DebugCommand_568/debugcmd_3.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;開発中にいろんなものを実行したい&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ゲーム開発中には様々な情報が欲しくなる場面が沢山あります。シンプルな情報であればブレークポイントを設定して変数を調べたりすることができますが、３Ｄゲームで画面に表示されている数十体もある敵のうちからひとつの敵の情報をデバッガを使って得るのは大変です。また、スタンドアローン実行している状態、例えばVisual StudioからCtrl+F5で実行した時や、友達の家でテストプレイしているときにバグが発生したときにも、ある程度の情報を知りたい場面があります。それ以外にも開発中に実行したいことはパッと思いつくだけでも以下のものがあります。 &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;シーン全体のポリゴン数 &lt;/LI&gt;
&lt;LI&gt;指定したシェーダーのみの表示 &lt;/LI&gt;
&lt;LI&gt;カメラの視錐体表示してビューカリングのチェック &lt;/LI&gt;
&lt;LI&gt;シーン内を自由に移動できるデバッグ用カメラへの切り替え &lt;/LI&gt;
&lt;LI&gt;敵の数の表示 &lt;/LI&gt;
&lt;LI&gt;シーン内のコリジョン情報の表示 &lt;/LI&gt;
&lt;LI&gt;イベントトリガー等の表示 &lt;/LI&gt;
&lt;LI&gt;AIテスト用に任意の敵を出現させる &lt;/LI&gt;
&lt;LI&gt;任意の敵を即死させる &lt;/LI&gt;
&lt;LI&gt;AIステートの表示 &lt;/LI&gt;
&lt;LI&gt;指定した武器を出現させる &lt;/LI&gt;
&lt;LI&gt;指定したステージへの移動 &lt;/LI&gt;
&lt;LI&gt;プレイヤーのHP設定 &lt;/LI&gt;
&lt;LI&gt;Godモード (無敵モード)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;これだけの機能を実現するシステムとして、以下の方法が考えられます。 &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;欲しい機能ごとにソースコードを変更してコンパイルする &lt;/LI&gt;
&lt;LI&gt;コントローラーのボタンに割り当てる &lt;/LI&gt;
&lt;LI&gt;簡単なデバッグメニューを作る &lt;/LI&gt;
&lt;LI&gt;WindowsみたいなUIを表示させるAPIを作る &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;１は単純な方法ですが、いちいちソースコードをコンパイルするというのは面倒だし、スタンドアローン実行時には使えません。２は表示、非表示といったことには使えますが、数に限りがあり管理するのも大変です。３も表示のコントロールなどには使えますが、任意の敵を指定した場所に出現させるといったことには不向きです。４については、Windowsの場合は既存のUIを使えば良いのですが、Xbox 360上では自作する必要があるし、仮にそういったAPIがあったとしても機能ごとのGUIを作るのに手間が掛かります。また、GUIの弱点としてはバッチ処理をするのが難しいという面もあります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;デバッグコマンド&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;こういった要求を満たすためにゲーム開発現場で昔から使われているのがデバッグコマンドです。本来は開発時のみの機能で商品化されたゲームで見かけることは少ないのですが、PCゲームではDOOM時代からあるものなので知っている人も居ると思います。&lt;/P&gt;
&lt;P&gt;デバッグコマンドの利点は文字列を入力実行し、出力するというシンプルさにあります。ゲーム中にコマンドを入力して実行するのはもちろん、ネットワークを介して文字列を転送して実行することができます。このことを利用して開発PCとXbox 360間をNetworkSessionで繋ぎ、Windows上ではGUIを使い、その情報を文字列にしてXbox 360に転送するという使い方もできます。この手法はPC上で作ったマップエディターから実機上への通信にも利用されています。特にPC画面上と開発機から出力された画面では色が違うのでBrute Force開発時にはライティングの最終調整などで使っていました。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;デバッグコマンドを使う&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;サンプルでは&lt;STRONG&gt;DebugCommandUI&lt;/STRONG&gt;コンポーネントを使用します。DebugCommandUIコンポーネントはDebugManagerにあるフォントを使用するので、DebugCommandを追加する前にDebugManagerコンポーネントを追加する必要があります。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// デバッグマネージャーの初期化と追加
&lt;/SPAN&gt;debugManager = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DebugManager&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);
Components.Add( debugManager );

&lt;SPAN style="COLOR: green"&gt;// デバッグマコマンドUIの初期化と追加
&lt;/SPAN&gt;debugCommandUI = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DebugCommandUI&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);

&lt;SPAN style="COLOR: green"&gt;// デバッグコマンドUIを最上面に表示させる為にDrawOrderを変更する
&lt;/SPAN&gt;debugCommandUI.DrawOrder = 100;

Components.Add( debugCommandUI );&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;DebugManagerコンポーネントを追加した後に、DebugCommandUIコンポーネントを生成、デバッグコマンドを最上面に描画させる為にDrawOrderを変更してから追加するだけで、デバッグコマンドを使用することができます。ゲーム中にTABキーを押すことでデバッグコマンドを表示してコマンドを入力することができます。&lt;/P&gt;
&lt;P&gt;新しいコマンドを追加するには&lt;STRONG&gt;DebugCommandUI.RegisterCommand&lt;/STRONG&gt;メソッドを使います。このメソッドにはコマンド名、コマンドの説明、そしてコマンド実行じに呼び出されるデリゲートを指定します。デバッグサンプルではposコマンドを追加しています。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// サンプルコマンドの登録
&lt;/SPAN&gt;debugCommandUI.RegisterCommand(
    &lt;SPAN style="COLOR: #a31515"&gt;"pos"&lt;/SPAN&gt;,              &lt;SPAN style="COLOR: green"&gt;// コマンド名
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;"set position"&lt;/SPAN&gt;,     &lt;SPAN style="COLOR: green"&gt;// コマンド説明
    &lt;/SPAN&gt;PosCommand          &lt;SPAN style="COLOR: green"&gt;// コマンド実行用デリゲート
    &lt;/SPAN&gt;);&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;登録したデリゲートはコマンドが実行された時に自動的に呼び出されます。デバッグサンプルでは"pos"というコマンドが入力されるとPosCommandが呼び出されます。引数のhostはコマンドを実行したIDebugCommandHost、commandは入力されたコマンド文字列(ここではpos)、そしてargumentsは入力された他の引数を文字列の配列になっています。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;void &lt;/SPAN&gt;PosCommand( &lt;SPAN style="COLOR: #2b91af"&gt;IDebugCommandHost &lt;/SPAN&gt;host, &lt;SPAN style="COLOR: blue"&gt;string &lt;/SPAN&gt;command,
                                            &lt;SPAN style="COLOR: #2b91af"&gt;IList&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;gt; arguments )
{
    &lt;SPAN style="COLOR: blue"&gt;if &lt;/SPAN&gt;( &lt;SPAN style="COLOR: #2b91af"&gt;String&lt;/SPAN&gt;.Compare( arguments[0], &lt;SPAN style="COLOR: #a31515"&gt;"show"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;true &lt;/SPAN&gt;) == 0 )
    {
        &lt;SPAN style="COLOR: green"&gt;// show オプションで現在座標を表示する
        &lt;/SPAN&gt;host.Echo( &lt;SPAN style="COLOR: #2b91af"&gt;String&lt;/SPAN&gt;.Format( &lt;SPAN style="COLOR: #a31515"&gt;"Pos={0},{1}"&lt;/SPAN&gt;, debugPos.X, debugPos.Y ) );
    }
    &lt;SPAN style="COLOR: blue"&gt;else
    &lt;/SPAN&gt;{
        &lt;SPAN style="COLOR: green"&gt;// "pos x座標 y座標"と入力されたものを処理する
        &lt;/SPAN&gt;debugPos.X = &lt;SPAN style="COLOR: #2b91af"&gt;Single&lt;/SPAN&gt;.Parse( arguments[0] );
        debugPos.Y = &lt;SPAN style="COLOR: #2b91af"&gt;Single&lt;/SPAN&gt;.Parse( arguments[1] );
    }
}&lt;/PRE&gt;
&lt;P&gt;各コマンドは単なる文字列なのでテキストファイルとしてログを取っておいて、後で複数のコマンドをバッチ処理したりすることができます。&lt;A target=_blank href="http://blogs.msdn.com/ito/archive/2008/12/12/gamefest-japan-2008-demo.aspx" mce_href="http://blogs.msdn.com/ito/archive/2008/12/12/gamefest-japan-2008-demo.aspx"&gt;Gamefest Japan 2008 デモプログラム&lt;/A&gt;の中ではデモを切り替えたときに以下のようにして３つのコマンドを呼び出していました。&lt;/P&gt;&lt;PRE class=code&gt;debugHost.ExecuteCommand( &lt;SPAN style="COLOR: #2b91af"&gt;String&lt;/SPAN&gt;.Format( &lt;SPAN style="COLOR: #a31515"&gt;"demo {0}"&lt;/SPAN&gt;, demoNames[curdemo] ) );
debugHost.ExecuteCommand( &lt;SPAN style="COLOR: #a31515"&gt;"fps on" &lt;/SPAN&gt;);
debugHost.ExecuteCommand( &lt;SPAN style="COLOR: #a31515"&gt;"tr on reset log:on" &lt;/SPAN&gt;);&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;デバッグコマンドは、その名が示すとおり、デバッグ時の機能なのでリリース時に外すことを忘れないようにしてください。Godモードのように無敵になるくらいだったらいいのですが、ゲームバランスを崩したり、ゲームの進行ができなくなるようなコマンドが残ったままリリースされるのは避けるようにしましょう。デバッグコマンドを外すもっとも簡単な方法は単にDebugCommandUIを追加しないようにするだけです。&lt;/P&gt;
&lt;P&gt;と、いうわけでFPSカウンター、TimeRuler、そしてデバッグコマンドを紹介してきました。これら３つのコンポーネントをゲーム開発時に役立ててみてはどうでしょうか？&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9372299" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/_C730D030C330B030_/default.aspx">デバッグ</category></item><item><title>タイムルーラー</title><link>http://blogs.msdn.com/ito/archive/2008/12/29/timeruler.aspx</link><pubDate>Tue, 30 Dec 2008 03:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9256397</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/ito/comments/9256397.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9256397</wfw:commentRss><description>&lt;P&gt;注:今回紹介するコンポーネントは&lt;A target=_blank href="http://blogs.msdn.com/ito/archive/2008/12/27/debug-components-sample.aspx" mce_href="http://blogs.msdn.com/ito/archive/2008/12/27/debug-components-sample.aspx"&gt;デバッグサンプル&lt;/A&gt;に入っています。&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=TimeRuler src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/TimerRuler_FB53/TimeRuler_3.png" width=510 height=129 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/TimerRuler_FB53/TimeRuler_3.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;時を測る&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;前回紹介したFPSカウンターではゲーム全体のパフォーマンスを測定するには使えますが、どの処理がどれだけ時間が掛かっているかを判定するには不向きです。&lt;/P&gt;
&lt;P&gt;例えば、ねこが大勢の敵をなぎ倒す「ねこ無双」というゲームを作っていて、敵が沢山出てきた時に処理落ちになった場合に最適化をする必要があったとします。&lt;/P&gt;
&lt;P&gt;最適化ルールその３:「最も負荷の高い部分(ボトルネック)の処理を最適化する」&lt;/P&gt;
&lt;P&gt;これは当然の話で、１フレーム内で10%しか消費していない処理よりも、50%消費している部分を最適化する方が効果的です。では、この高負荷の処理を発見するにはどうしたら良いでしょうか？ねこ無双の場合だと、敵が増えると処理落ちがするんだから真っ先に思いつくのは敵AI、敵のアニメーション、敵のコリジョン判定、敵の描画処理部分です。&lt;/P&gt;
&lt;P&gt;しかし、必ずしもそうとは限りません。もしかしたら、敵の数ではなく戦っている場面の描画部分がもともと負荷が多かったのかもしれないし、敵を表示するレーダー部分かもしれません。&lt;/P&gt;
&lt;P&gt;このボトルネックを発見するのに有用なのがリアルタイムプロファイラー、TimeRuler(タイムルーラー)です。TimeRulerでは、複数の処理時間を測定することができ、その結果をグラフでリアルタイムに表示してくれます。&lt;/P&gt;
&lt;P&gt;上図の例では、青い部分が更新処理、黄色い部分が描画処理になっています。この状態で最適化する場合は更新処理部分を最適化するのが効果的だと言うことが一目で判ります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;アルゴリズムのチェック&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;理想的なアルゴリズムは計算量のオーダーがO(n)、もしくはO(n log n)になることです。例えば、敵を10体出現させたときの処理時間が1msだった場合、敵が100体になった時の処理時間が10ms~20ms以内に収まっていれば理想的なアルゴリズムを使っているということになります。逆に敵１００体の処理時間が1,000msになってしまうのは、計算量オーダーがO(n^2)になっているアルゴリズムを使っている可能性があります。良くあるケースでは、コリジョン判定を単純な多重ループにしている時などです。&lt;/P&gt;
&lt;P&gt;特に最近のゲームでは大量のオブジェクト数を処理するので、アルゴリズムの選択を間違えると、あっという間に処理が間に合わなくなってしまうので注意が必要です。&lt;/P&gt;
&lt;P&gt;TimeRulerを使ってオブジェクトの数を10,20,...100と順々に増やしていき、それぞれの処理時間を測定してグラフにすることで問題のあるアルゴリズム部分を発見することができます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;瞬間最大負荷を測る&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;TimeRulerはリアルタイムプロファイラーなので、瞬間的な負荷も視覚的に見ることができます。例えば同じフレーム内で大量の敵を一気に発生させると、敵の初期化処理に時間が掛かりすぎて、そのフレームだけ処理落ちするということがあります。こういった瞬間的な負荷はFPSカウンターで発見することは不可能ですが、TimeRulerを使うとグラフが一瞬大きくブレるので判ります。&lt;/P&gt;
&lt;P&gt;また、TimeRulerを表示した状態でビデオに録画したり、動画をキャプチャーしておけば、こういった瞬間的な負荷を細かく調べることもできます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;TimeRulerを使う為の準備&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;TimeRulerコンポーネントはDebugManagerにあるフォントを使用するので、TimeRulerを追加する前にDebugManagerコンポーネントを追加する必要があります。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// デバッグマネージャーの初期化と追加
&lt;/SPAN&gt;debugManager = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DebugManager&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);
Components.Add( debugManager );&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;また、必須ではありませんが、TimeRulerはインスタンス生成時にGame.Servicesに&lt;STRONG&gt;IDebugCommandHost&lt;/STRONG&gt;インターフェースが追加されていると、&lt;STRONG&gt;tr&lt;/STRONG&gt;デバッグコマンドを登録します。DeubgCommandUIはIDebugCommandHostインターフェースを実装しているので、このコンポーネントを追加した後にTimeRulerを追加することで&lt;STRONG&gt;tr&lt;/STRONG&gt;コマンドを使うことができます。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// デバッグマコマンドUIの初期化と追加
&lt;/SPAN&gt;debugCommandUI = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DebugCommandUI&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);

&lt;SPAN style="COLOR: green"&gt;// デバッグコマンドUIを最上面に表示させる為にDrawOrderを変更する
&lt;/SPAN&gt;debugCommandUI.DrawOrder = 100;

Components.Add( debugCommandUI );&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;デバッグコマンドUIをTabキーを押して表示させた後に、trとタイプするとTimerRulerの表示/非表示の切り替え、"tr on"で表示、"tr off"で非表示にすることができます。&lt;/P&gt;
&lt;P&gt;また、trコマンドには以下のオプションがあります。&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=475&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=61&gt;log&lt;/TD&gt;
&lt;TD vAlign=top width=409&gt;ログの表示/非表示の切り替え。 &lt;BR&gt;例) tr log&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=61&gt;reset&lt;/TD&gt;
&lt;TD vAlign=top width=409&gt;ログ履歴の初期化 &lt;BR&gt;例) tr reset&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=61&gt;frame&lt;/TD&gt;
&lt;TD vAlign=top width=409&gt;TimeRulerのバーの長さをフレーム単位で指定する(既定値:1) &lt;BR&gt;例) tr frame:2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;プログラム側でも、これらの操作はできるようになっていて、表示の切り替えは&lt;STRONG&gt;TimeRuler.Visible&lt;/STRONG&gt;プロパティ、Logの表示は&lt;STRONG&gt;TimeRuler.ShowLog&lt;/STRONG&gt;プロパティ、表示フレーム数は&lt;STRONG&gt;TimeRuler.TargetSampleFrames&lt;/STRONG&gt;プロパティ、そしてログのリセットは&lt;STRONG&gt;TimeRuler.ResetLog&lt;/STRONG&gt;メソッドを呼ぶことでできます。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;最後に、TimeRulerをComponentsに追加することでTimeRulerが画面下に表示されるようになります。ただし、DebugCommandUIが先に登録されていると、初期状態では表示されません。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// タイムルーラーの初期化と追加
&lt;/SPAN&gt;timerRuler = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;TimeRuler&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);
Components.Add( timerRuler );&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;&lt;STRONG&gt;TimeRulerの使い方&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;上記の初期化を終えれば、TimeRulerを使う準備ができました。まず、TimeRulerにフレームの開始時点を知らせる&lt;STRONG&gt;StartFrame&lt;/STRONG&gt;メソッドを呼びます。場所はGameクラスのUpdateメソッドの先頭に記述するのが良いでしょう。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// タイムルーラーにフレーム開始を伝える
&lt;/SPAN&gt;timerRuler.StartFrame();&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;次に測定したい部分を&lt;STRONG&gt;BeinMark&lt;/STRONG&gt;と&lt;STRONG&gt;EndMark&lt;/STRONG&gt;メソッドで囲みます。BeginMarkメソッドには表示するバーのインデックス値(0~７)、マーカー名、バーに表示されるときの色を指定し、EndMarkではバーのインデックス値とマーカー名を指定します。マーカー名はCaseセンシティブなので、大文字小文字が違うと違うマーカー名と認識されることに注意してください。バーのインデックス値は省略するとインデックス値を0として呼び出した事になります。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// 更新期間、"Update"の測定開始
&lt;/SPAN&gt;timerRuler.BeginMark( 0, &lt;SPAN style="COLOR: #a31515"&gt;"Update"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #2b91af"&gt;Color&lt;/SPAN&gt;.Blue );

&lt;SPAN style="COLOR: green"&gt;// Updateの処理をここでする
&lt;/SPAN&gt;...

&lt;SPAN style="COLOR: green"&gt;// 更新期間、"Update"の測定終了
&lt;/SPAN&gt;timerRuler.EndMark( 0, &lt;SPAN style="COLOR: #a31515"&gt;"Update" &lt;/SPAN&gt;);&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;BeginMarkは以下のコードのように階層的に呼び出すこともできます。デフォルトでは最大３２階層になっていますが、TimeRuler.MaxNestCall定数値を変更することができます。ただし、Begin A, Begin B, End B, End Aのように呼べますが、Begin A, Begin B, End A, End Bのように呼ぶことはできません。&lt;/P&gt;&lt;PRE class=code&gt;timerRuler.BeginMark( &lt;SPAN style="COLOR: #a31515"&gt;"Update"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #2b91af"&gt;Color&lt;/SPAN&gt;.Blue );

    timerRuler.BeginMark( &lt;SPAN style="COLOR: #a31515"&gt;"Character Update"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #2b91af"&gt;Color&lt;/SPAN&gt;.Azure );

        timerRuler.BeginMark( &lt;SPAN style="COLOR: #a31515"&gt;"Character Animation"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #2b91af"&gt;Color&lt;/SPAN&gt;.BurlyWood );
        &lt;SPAN style="COLOR: green"&gt;// キャラクターアニメーション処理
        &lt;/SPAN&gt;...
        timerRuler.EndMark( &lt;SPAN style="COLOR: #a31515"&gt;"Character Animation" &lt;/SPAN&gt;);

        timerRuler.BeginMark( &lt;SPAN style="COLOR: #a31515"&gt;"Character Collision"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #2b91af"&gt;Color&lt;/SPAN&gt;.DarkOrchid );
        &lt;SPAN style="COLOR: green"&gt;// キャラクターコリジョン処理
        &lt;/SPAN&gt;...
        timerRuler.EndMark( &lt;SPAN style="COLOR: #a31515"&gt;"Character Collision" &lt;/SPAN&gt;);

    timerRuler.EndMark( &lt;SPAN style="COLOR: #a31515"&gt;"Character Update" &lt;/SPAN&gt;);

timerRuler.EndMark( &lt;SPAN style="COLOR: #a31515"&gt;"Update" &lt;/SPAN&gt;);&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;TRACE定数でTimeRuler機能のコントロール&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;TimeRulerはその性質上リリースビルドでも動作するようになっていますが、実際にゲームをリリースするときには実行する必要はありません。ゲームコード内に埋め込んだBegin/EndMarkを手で消したりするのはあまりにも不効率過ぎるので、簡単にそれらのメソッドの呼び出しを制御するためにTimeRulerの殆どのメソッドには&lt;A target=_blank href="http://msdn.microsoft.com/ja-jp/library/aa664622(VS.71).aspx" mce_href="http://msdn.microsoft.com/ja-jp/library/aa664622(VS.71).aspx"&gt;Conditional属性&lt;/A&gt;を使ってTRACE定数が宣言されているときのみに呼び出されるようになっています。TRACE定数はプロジェクトプロパティのビルドタブにある「TRACE定数の定義」のチェックボックスによってコントロールすることができます。&lt;/P&gt;
&lt;P&gt;C/C++ではコンパイラ最適化の一つとして呼び出し先が空の関数の場合には関数呼び出しのコードを生成しないようになっていますが、.Netでは呼び出するメソッドが空のメソッドであっても、メソッド呼び出しコードを生成します。代わりにConditional属性を使い、指定された定数が宣言されていない場合は、そのメソッドに使われた引数も含めて呼び出しコードを生成しないようになっています。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;マシン性能のクセを知る&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ここではTimeRulerなんていう格好つけた名前をつけてはいますが、同様の仕組みは8ビット機時代から使われていたものです。例えばPCエンジンでは、あるパレットの色を変更するとTVの画面外の色を変更することができるので、処理毎に色を変えることで画面の両脇に縦に伸びるバーを作ることができました。&lt;/P&gt;
&lt;P&gt;実装方法は変わりましたが、バーが振り切らないようにゲームを作るという目的は今も昔も一緒です。特に、最近のシステムでは幾重ものパイプラインステージやキャッシュといった複雑な仕組みがあるので、必ずしもコード量が実行速度に比例するわけではありません。ですから、常にTimeRulerを使うことでどの処理がどれくらいの負荷になるのかを実感できることができます。&lt;/P&gt;
&lt;P&gt;次回はデバッグコマンドを紹介します。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9256397" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/_C730D030C330B030_/default.aspx">デバッグ</category></item><item><title>FPSカウンター</title><link>http://blogs.msdn.com/ito/archive/2008/12/27/fps-counter.aspx</link><pubDate>Sun, 28 Dec 2008 04:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9254649</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9254649.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9254649</wfw:commentRss><description>&lt;P&gt;注:今回紹介するコンポーネントは&lt;A target=_blank href="http://blogs.msdn.com/ito/archive/2008/12/27/debug-components-sample.aspx" mce_href="http://blogs.msdn.com/ito/archive/2008/12/27/debug-components-sample.aspx"&gt;デバッグサンプル&lt;/A&gt;に入っています。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=fps-counter src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/fpscounter_BC74/fps-counter_3.png" width=180 height=90 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/fpscounter_BC74/fps-counter_3.png"&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;正確な測定には注意が必要&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;FPSカウンターは、一定時間内に(数秒程度)何フレーム更新できたかを計測した結果から、１秒間のフレーム数、FPS(Frame Per Second)を表示するという、非常に簡単な機能です。&lt;/P&gt;
&lt;P&gt;ですが、正確なFPSを測定するには幾つかの注意が必要です。&lt;STRONG&gt;Game.IsFixedTimeStep&lt;/STRONG&gt;の既定値はtrueになっているので、ゲームの更新と描画に掛かる時間が1msだとしても、見かけ上は16.6ms、つまり60FPSになってしまいます。また、描画時にV-Syncに同期するようになっているので、IsFixedTimeStepだけをfalseにしてもやはり60FPSになってしまいます。&lt;/P&gt;
&lt;P&gt;FPSを正しく測定するにはゲームクラスのコンストラクタ内で以下の様なコードを実行する必要があります。&lt;/P&gt;&lt;PRE class=code&gt;graphics = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;GraphicsDeviceManager&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);

graphics.SynchronizeWithVerticalRetrace = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;;
IsFixedTimeStep = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;;&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;これでFPS自体は正しく測定することができますが、IsFixedTimeStepをfalseに変更するということは、ゲームの更新の仕方が&lt;STRONG&gt;固定更新&lt;/STRONG&gt;から、&lt;STRONG&gt;可変更新&lt;/STRONG&gt;に変えるということです。もし、キャラクターを移動するコードが以下の様になっている場合に可変更新に変更すると、キャラクターの移動が速すぎてゲームがプレイ不可能になる場合があります。&lt;/P&gt;&lt;PRE class=code&gt;pos += speed;&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;この問題を解決するには以下の様に、経過時間によって移動するようなコードになっている必要があります。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;float &lt;/SPAN&gt;dt = (&lt;SPAN style="COLOR: blue"&gt;float&lt;/SPAN&gt;)gameTime.ElapsedGameTime.TotalSeconds;

pos += speed * dt;&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;固定更新、可変更新の振る舞いの違いについては、&lt;A target=_blank href="http://blogs.msdn.com/ito/archive/2007/03/08/2-update.aspx" mce_href="http://blogs.msdn.com/ito/archive/2007/03/08/2-update.aspx"&gt;この投稿&lt;/A&gt;が参考になると思います。もし、既に固定更新でゲームを作っている場合にはFPSカウンターを使う意味はあまりありません。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GPUとCPUバランスに注意&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;また、CPUとGPUの負荷バランスが違う場合には、FPS値は参考になりません。例えば６０フレームのゲームを作っている時にFPS値が丁度６０フレームになっているからといって、必ずしもこれ以上の処理を追加できないと言うわけではありません。例えば、１フレームあたりの処理時間が、CPUが50%、GPUが100%近く消費している場合、CPU側にはまだ５０%の余力があるにも関わらずFPSの値は６０になるので、余力が無いように見えてしまいます。逆にCPU100%、GPU50%の状態でも同じです。&lt;/P&gt;
&lt;P&gt;CPU、GPUバランスを調べる簡単な方法は、GPUの負荷を測定するにはUpdate内では何も処理をせずにDrawだけ実行し、CPUの負荷を測定するには逆にDrawの処理をしないようにする方法があります。ただし、Draw内にもCPU部分の処理があるので、もっと正確にCPUの負荷を測定するにはDrawPrimitiveのメソッドのみをコメントアウトする必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;６０FPSにならないんだけど&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;IsFixedTimeStepとSynchronizeWithVerticalRetraceをtrueにした状態で、明らかにゲーム全体の処理が16.6ms以内で済んでいるのにも関わらず、FPSにはいつも59.xxしか表示されない。というのはおかしいと思う人もいるかもしれません。&lt;/P&gt;
&lt;P&gt;これには３つの理由があります。ひとつめはTVの60フレームというのは実際には&lt;STRONG&gt;59.94&lt;/STRONG&gt;(厳密に言えば60/ 100.1%)になるので、理論的に60と言う数値にはならないこと。ふたつめは、測定する場合に１フレーム以下の余りの時間分で誤差がでるということ。そして、ハードウェア的には59.94でフレームを更新していても、ソフトウェア的に測定ポイントまで戻ってくるまでの時間が微妙に変わってくるということです。&lt;/P&gt;
&lt;P&gt;ですから、59.xxと言う数値を見たときには約60FPSと考えても問題ありません。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;FpsCounterコンポーネントの使い方&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;FpsCounterコンポーネントはDebugManagerにあるフォントを使用するので、FpsCounterを追加する前にDebugManagerコンポーネントを追加する必要があります。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// デバッグマネージャーの初期化と追加
&lt;/SPAN&gt;debugManager = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DebugManager&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);
Components.Add( debugManager );&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;また、必須ではありませんが、FpsCounterはインスタンス生成時にGame.Servicesに&lt;STRONG&gt;IDebugCommandHost&lt;/STRONG&gt;インターフェースが追加されていると、&lt;STRONG&gt;fps&lt;/STRONG&gt;デバッグコマンドを登録します。DeubgCommandUIはIDebugCommandHostインターフェースを実装しているので、このコンポーネントを追加した後にFpsCounterを追加することで&lt;STRONG&gt;fps&lt;/STRONG&gt;コマンドを使うことができます。&lt;/P&gt;
&lt;P&gt;デバッグコマンドUIをTabキーを押して表示させた後に、fpsとタイプするとFPSの表示/非表示の切り替え、"fps on"で表示、"fps off"で非表示にすることができます。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// デバッグマコマンドUIの初期化と追加
&lt;/SPAN&gt;debugCommandUI = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DebugCommandUI&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);

&lt;SPAN style="COLOR: green"&gt;// デバッグコマンドUIを最上面に表示させる為にDrawOrderを変更する
&lt;/SPAN&gt;debugCommandUI.DrawOrder = 100;

Components.Add( debugCommandUI );&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;最後に、FpsCounterをComponentsに追加することでFPSが画面左上に表示されるようになります。ただし、DebugCommandUIが先に登録されていると、初期状態では表示されません。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// FPSカウンターの初期化と追加
&lt;/SPAN&gt;fpsCounter = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;FpsCounter&lt;/SPAN&gt;( &lt;SPAN style="COLOR: blue"&gt;this &lt;/SPAN&gt;);
Components.Add( fpsCounter );&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;FpsCounterはDrawableGameComponentから派生しているので、プログラム上から表示/非表示をコントロールするにはVisibleプロパティを変更することでできます。&lt;/P&gt;&lt;PRE class=code&gt;fpsCounter.Visible = true&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;次回はリアルタイムプロファイラーであるTimerRulerコンポーネントを紹介します。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9254649" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/_C730D030C330B030_/default.aspx">デバッグ</category></item><item><title>招待サンプル</title><link>http://blogs.msdn.com/ito/archive/2008/11/25/invites-sample.aspx</link><pubDate>Wed, 26 Nov 2008 04:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9143077</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9143077.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9143077</wfw:commentRss><description>&lt;P&gt;今日は&lt;A target=_blank href="http://creators.xna.com/en-US/sample/invites" mce_href="http://creators.xna.com/en-US/sample/invites"&gt;招待サンプル&lt;/A&gt;を紹介します。&lt;/P&gt;
&lt;P&gt;Xbox Live!の機能のひとつに、フレンドリスト内の友達と一緒にネットワークゲームをプレイしたいときに誘える招待機能があります。XNA GS 3.0ではこの招待機能がサポートされています。招待するケースとしては以下の二つのケースがあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;同じゲームをプレイしている時(In-Title Invites)&lt;/LI&gt;
&lt;LI&gt;違うゲームをプレイしている時(Cross-Title Invites)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;XNA GS 3.0上では、このどちらのケースでも&lt;STRONG&gt;NetworkSession.InviteAccepted&lt;/STRONG&gt;イベントが発生します。このイベントを受け取った時に、&lt;STRONG&gt;NetworkSession.JoinInvite&lt;/STRONG&gt;メソッドを呼ぶことで招待された側が招待した側のセッションに接続できるようになっています。以下はイベントハンドラへの登録と、ハンドラ内での処理の例です。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: #2b91af"&gt;NetworkSession&lt;/SPAN&gt;.InviteAccepted += InviteAcceptedEventHandler;&lt;BR&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;void &lt;/SPAN&gt;InviteAcceptedEventHandler(&lt;SPAN style="COLOR: blue"&gt;object &lt;/SPAN&gt;sender, &lt;SPAN style="COLOR: #2b91af"&gt;InviteAcceptedEventArgs &lt;/SPAN&gt;e)
{
    &lt;SPAN style="COLOR: green"&gt;// 現在のセッションから抜ける
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if &lt;/SPAN&gt;(networkSession != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)
    {
        networkSession.Dispose();
        networkSession = &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;
    }

    &lt;SPAN style="COLOR: green"&gt;// 招待されたセッションに入る
    &lt;/SPAN&gt;networkSession = &lt;SPAN style="COLOR: #2b91af"&gt;NetworkSession&lt;/SPAN&gt;.JoinInvited(maxLocalGamers);
}&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;同じゲームをプレイしている場合は、通常のNetworkSessionの振る舞いと殆ど同じですが、違うゲームをプレイしている場合は振る舞いの仕方が変わってきます。ただし、これらの処理は全てOS側で行われるのでゲーム開発者は前述のInviteAcceptedイベントの実装をするだけです。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Xbox 360上で同じゲームが既にインストールしている場合は自動的にゲームが起動され、その直後にInviteAcceptedイベントが発生します。&lt;/LI&gt;
&lt;LI&gt;クリエーターゲーム(開発中のゲームやピアレビュー中のゲーム)の場合は、招待した人が同じゲームを持っていない場合に、その旨を伝えるメッセージが表示されます。&lt;/LI&gt;
&lt;LI&gt;コミュニティゲームの場合、ユーザーがそのゲームを持っていない場合はマーケットプレースに自動的に移動、該当するゲームをダウンロードするかのメニューが表示され、ダウンロード後に自動的にゲームが起動されます。&lt;/LI&gt;
&lt;LI&gt;Windows上の場合、上記のように自動的なダウンロードや起動するといった機能がないので、ユーザーが手動で行う必要があります。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;テスト時の注意&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;招待機能はXbox Live!の機能なので、ネットワークゲームのテストの様にシステムリンク(ローカル)を使ってテストできるのと違い、クリエータークラブ会員になっているゲーマータグが二つ必要なことに注意してください。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9143077" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/_CD30C330C830EF30FC30AF30_/default.aspx">ネットワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item><item><title>セーフエリア・サンプル </title><link>http://blogs.msdn.com/ito/archive/2008/11/21/safearea-sample.aspx</link><pubDate>Sat, 22 Nov 2008 06:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9132551</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9132551.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9132551</wfw:commentRss><description>&lt;P&gt;今回は&lt;A target=_blank href="http://creators.xna.com/en-US/sample/safearea" mce_href="http://creators.xna.com/en-US/sample/safearea"&gt;セーフエリア サンプル(Safe Area)&lt;/A&gt;の紹介をします。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;世の中には様々なTVがある&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ゲームをプレイする人達のTV環境は実に様々なものがあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;オーバースキャンとアンダースキャン&lt;/LI&gt;
&lt;LI&gt;HDTVとSDTV&lt;/LI&gt;
&lt;LI&gt;ワイドスクリーンと4:3&lt;/LI&gt;
&lt;LI&gt;コンポーネント接続とコンポジット接続&lt;/LI&gt;
&lt;LI&gt;60cm(2フィート)と3m(10フィート)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;オーバースキャンとセーフエリア&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;PCモニタなどのイメージ全体を表示するアンダースキャン方式に対して、HDTV、SDTVのどちらも、その多くがイメージ全体を表示することのできないオーバースキャン方式を採用しています。&lt;/P&gt;
&lt;P&gt;イメージ全体を表示することができないので、ゲームでスクリーン座標の左上(0, 0)に文字を表示したりするとオーバースキャン方式のディスプレイでは文字が読めなくなってしまいます。&lt;/P&gt;
&lt;P&gt;こういったオーバースキャン方式のディスプレイには以下の二つのタイプのセーフエリアがあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;タイトルセーフエリア(80%の領域)&lt;/LI&gt;
&lt;LI&gt;アクションセーフエリア(90%の領域)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;タイトルセーフエリアには文字などの大事な情報を表示する領域で、下図の青い色の領域になります。アクションセーフエリアは殆どのディスプレイで表示される領域です数では緑色の枠内の領域になります。そして、赤い部分はディスプレイによっては全く表示されない領域です。&lt;/P&gt;
&lt;P&gt;この画像は1280x720の画像なので、ゲームのインターフェースのデザインなどをするときにガイドラインとして使えるようになっています。&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;A target=_blank href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=safearea src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea_thumb.png" width=244 height=139 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea_thumb.png"&gt;&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;さて、タイトルセーフエリアに大事な情報を表示するからといって、Xbox 360、PCの両方で文字列をタイトルセーフエリアに描画した場合、Xbox 360上での見た目は良いとしても、PC上だと無駄にまわりのスペースが空いてしまいます。&lt;/P&gt;
&lt;P&gt;そこで、XNA GS 3.0から追加された&lt;STRONG&gt;Viewport.TitleSafeArea&lt;/STRONG&gt;プロパティを使います。このプロパティPC上では元のビューポートのサイズと一緒になりますが、Xbox 360上ではビューポートの80%の領域、つまりタイトルセーフエリアを返します。&lt;/P&gt;
&lt;P&gt;Safe Areaサンプル内にある&lt;STRONG&gt;AlignedSpriteBatch&lt;/STRONG&gt;クラスでは文字列をタイトルセーフエリアの右端、左上といった位置情報を指定して描画できるようになっています。&lt;/P&gt;
&lt;P&gt;また、&lt;STRONG&gt;SafeAreaOverlay&lt;/STRONG&gt;はコンポーネントになっていて、Xbox 360、デバッグの設定の時のみにタイトルセーフエリアの外側の領域を赤く表示するようになっています。&lt;/P&gt;
&lt;P&gt;実際のゲーム開発の場合に気をつける事としては、&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;3Dゲームの場合、操作するキャラクターが画面中央に描画しているかぎりはセーフエリアを気にすることがありません。&lt;/LI&gt;
&lt;LI&gt;スクロールタイプの2Dゲームの場合、メインキャラクターはタイトルセーフエリア内に表示するようにします。サンプルでは猫を移動することで画面をスクロールするようになっていますが、猫は常にタイトルセーフエリア内にいます。&lt;/LI&gt;
&lt;LI&gt;通常は全ての画面全体を描画するべきですが、シューティングゲームのようなものだと、あらかじめアクションセーフエリア外の部分を黒く表示して自機の移動範囲を判りやすくするという方法もあります。&lt;/LI&gt;
&lt;LI&gt;インターフェースの全てをタイトルセーフエリアに納める必要はない。下図はRoboGameをXbox 360上で実行したときの画面にセーフエリアを重ねた画像です。ゲームプレイにとって大事なプレイヤーのHPや武器の残弾数などの表示はタイトルセーフエリアに表示されていますが、ゲームプレイに支障のないインターフェースのデザイン的な部分はアクションセーフエリアに表示されています。&lt;/LI&gt;&lt;/UL&gt;
&lt;P align=center&gt;&lt;A target=_blank href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea-sample_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea-sample_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=safearea-sample src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea-sample_thumb.png" width=644 height=364 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/safearea-sample_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;解像度とアスペクト比&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;TVモニタの場合は標準解像度の640x480から、1080pの1980x1080まで様々な種類があり、またアスペクト比も16:9と4:3の二種類があります。&lt;/P&gt;
&lt;P&gt;Xbox 360向けのゲームで様々な解像度とアスペクト比に対応するもっとも簡単な方法は720p、つまり1280x720を使うことです。Xbox 360には1/4～4倍の解像度にスケーリングしてくれるハードウェアがあるので、720pを設定するとどの解像度でも自動的にスケーリングしてくれます。また、720pのアスペクト比は16:9ですが、4:3のTVを使った場合にはTV上では以下のようにレターボックス表示になります。&lt;/P&gt;
&lt;P align=center&gt;&lt;A target=_blank href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/4x3_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/4x3_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=4x3 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/4x3_thumb.png" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/safeareasample_115D5/4x3_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;モニタとの距離&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ゲーム開発中、PCモニタとの距離は60センチ程度ですが、実際にリビングルームでゲームをする場合は3メートル程の距離があります。と、米国では言ってますが日本の住宅事情を考えると、もうちょっと短い距離になりそうですが、要点としては自室でPCモニタを見ている感覚でゲームを作ってしまうと、リビングルームでプレイする時に文字が小さくて読めないという問題が発生します。目安としては720pの解像度で20ポイント以上の大きさの文字列をつかうことです。&lt;/P&gt;
&lt;P&gt;TVとの距離の他にも&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;細い線を描画しない、特に水平線を書いた場合にインターレース方式のTVではちらつきが発生します。&lt;/LI&gt;
&lt;LI&gt;明るい赤い文字を使用しない。NTSCの場合、にじみの原因になります。&lt;/LI&gt;
&lt;LI&gt;大事な情報は色だけでなく、サイズや形を変えたり、アニメーションするようにする。これは赤と緑の色の区別がつきにくいという色覚障害が日本人では男性の20人に１人、女性は500人に１人という低くない割合でいるので、こういった配慮をすることでより多くの人達が快適に遊べるようになります。パズルゲームで色を合わせるといった場合は、色だけでなく模様や形状を変えると良いでしょう。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;レイアウトに注意&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;3Dゲームのシーンを描画する時には気にする必要はあまりありませんが、メニュー画面などをデザインする時にはセーフエリアを意識してデザインする必要があります。特に、パズルゲームやテーブルゲームなどの固定画面型の2Dゲームの場合にはレイアウトがそのままゲームプレイに影響するので、画面一杯使ってレイアウトした結果、TV上ではゲームをプレイするのが不可能になってしまったなんて事にならないよう注意しましょう。&lt;/P&gt;
&lt;P&gt;元ネタ:Safe Areaに含まれるドキュメントファイルから&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9132551" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B030E930D530A330AF30B930_/default.aspx">グラフィクス</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item><item><title>ローカライゼーション・サンプル</title><link>http://blogs.msdn.com/ito/archive/2008/11/17/localization-sample.aspx</link><pubDate>Mon, 17 Nov 2008 13:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9109153</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9109153.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9109153</wfw:commentRss><description>&lt;P&gt;Creators Club Onlineに以下の３つの新しいサンプルが追加されました。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A target=_blank href="http://creators.xna.com/en-US/sample/localization" mce_href="http://creators.xna.com/en-US/sample/localization"&gt;ローカライゼーション サンプル(Localization)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A target=_blank href="http://creators.xna.com/en-US/sample/safearea" mce_href="http://creators.xna.com/en-US/sample/safearea"&gt;セーフエリア サンプル(Safe Area)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A target=_blank href="http://creators.xna.com/en-US/sample/invites" mce_href="http://creators.xna.com/en-US/sample/invites"&gt;招待 サンプル(Invites)&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;一気に紹介すると長くなるので、三回に分けてそれぞれのサンプルを紹介していきます。今回はローカライゼーション サンプルについて紹介します。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ローカライゼーション&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;コミュニティゲームでゲームを投稿する場合、配信地域を選ぶことができます。現状ではアメリカ、カナダ、イギリス、フランス、イタリア、そしてスペインの６カ国で、2009年の前半には日本が加わり７カ国になります。世界の複数の国々の人達に自分の作ったゲームを楽しんで貰うためには必要な作業としてローカライズがあります。そこで、このサンプルではローカライズされた文字列とアセットの使い方のコードが含まれています。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ローカライズされた文字列表示&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;このサンプルでは言語別のリソースファイル(.resxファイル)を用意し、ゲームクラスコンストラクタの中で実行環境の言語情報を以下のコードのように指定して文字列を変更しています。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Strings&lt;/SPAN&gt;.Culture = &lt;SPAN style="COLOR: #2b91af"&gt;CultureInfo&lt;/SPAN&gt;.CurrentCulture;&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;SpriteFontDescriptionクラスから派生したLocalizedFontDescriptionクラスに複数のリソースファイルを指定できるようになっていて、ここに各言語の文字列が入ったリソースファイルを指定し、コンテント･パイプライン内でLocalizedFontProcessorによって変換されます。&lt;/P&gt;
&lt;P&gt;言語別のリソースファイルは、&lt;STRONG&gt;リソース名.言語コード.resx&lt;/STRONG&gt;のようになっています。このサンプルではリソース名がStringsになっていて日本語のリソースファイル名は&lt;STRONG&gt;Strings.ja.resx&lt;/STRONG&gt;となっています。この言語コードは&lt;A target=_blank href="http://ja.wikipedia.org/wiki/ISO_639" mce_href="http://ja.wikipedia.org/wiki/ISO_639"&gt;ISO 639-1&lt;/A&gt;で定義されているアルファベット２文字になっています。&lt;/P&gt;
&lt;P&gt;殆どの場合は言語コードを指定するだけで済むのですが、言語コードだけでは足りなくなる場合もあります。例えば、同じ英語でもアメリカの場合はcolorでもイギリスの場合はcolourと違いがあります。その場合は言語コードと国名コードの組み合わせを使います。国名コードは&lt;A target=_blank href="http://ja.wikipedia.org/wiki/ISO_3166-1" mce_href="http://ja.wikipedia.org/wiki/ISO_3166-1"&gt;ISO 3166-1&lt;/A&gt;で定義されているアルファベット２文字を使います。アメリカの英語の場合は&lt;STRONG&gt;en-US&lt;/STRONG&gt;、イギリスの英語の場合は&lt;STRONG&gt;en-GB&lt;/STRONG&gt;となります。&lt;/P&gt;
&lt;P&gt;この&lt;STRONG&gt;言語コード-国名コード&lt;/STRONG&gt;の組み合わせをカルチャ名と呼び、カルチャを表すCultureInfoクラスを生成する時に以下のコードのようにして使用します。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Strings&lt;/SPAN&gt;.Culture = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;CultureInfo&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"en-GB"&lt;/SPAN&gt;);&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;ローカライズされたアセット読み込み&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ローカライズ作業の大半は文章の翻訳になりますが、中にはテクスチャ等のアセット自体をローカライズしたい時があります。このサンプルでは読み込むアセット名を前述のリソースファイル名と同じように、&lt;STRONG&gt;アセット名.カルチャ名&lt;/STRONG&gt;の組み合わせであることを前提として使うGetLocalizedAssetNameメソッドがゲームクラスに宣言されていて、国別の国旗テクスチャを変更しています。&lt;/P&gt;
&lt;P&gt;以下はコミュニティゲームがサポートする国と言語の表です。&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=441&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;国名&lt;/TD&gt;
&lt;TD vAlign=top width=109&gt;公用語&lt;/TD&gt;
&lt;TD vAlign=top width=78&gt;言語コード&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;国名コード&lt;/TD&gt;
&lt;TD vAlign=top width=100&gt;カルチャ名&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;アメリカ&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;英語&lt;/TD&gt;
&lt;TD vAlign=top width=79&gt;en&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;US&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;en-US&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;カナダ&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;英語、フランス語&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;en,fr&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;CA&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;en-CA,fr-CA&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;イギリス&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;英語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;en&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;GB&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;en-GB&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;フランス&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;フランス語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;fr&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;FR&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;fr-FR&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;イタリア&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;イタリア語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;it&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;IT&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;it-IT&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;スペイン&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;スペイン語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;es&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;ES&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;es-ES&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;日本&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;日本語&lt;/TD&gt;
&lt;TD vAlign=top width=82&gt;ja&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;JP&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;ja-JP&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;特徴として、カナダでは公用語が英語とフランス語の２つの言語が使われていることです。&lt;/P&gt;
&lt;P&gt;このサンプルは複数の言語へのローカライズの参考にもなりますが、リソースファイルを使った日本語表示の方法としても参考になるサンプルだと思います。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9109153" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/Windows/default.aspx">Windows</category></item><item><title>XNA Game Studio Connect関連の新機能</title><link>http://blogs.msdn.com/ito/archive/2008/10/31/xna-game-studio-connect.aspx</link><pubDate>Fri, 31 Oct 2008 13:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9026372</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9026372.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9026372</wfw:commentRss><description>&lt;P&gt;XNA Game Studio Connectに関連する新機能として以下の二つがあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;スクリーンキャプチャー機能&lt;/LI&gt;
&lt;LI&gt;配置の高速化&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;スクリーンキャプチャー&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;以前から要望として多かった機能の一つとしてXbox 360上で動作しているゲームのスクリーンキャプチャーがあります。XNA GS 3.0ではこのスクリーンキャプチャーが使えるようになりました。&lt;/P&gt;
&lt;P&gt;スクリーンキャプチャーはゲームをデバッガにアタッチした状態、つまりVisual Studio上からF5キーを押して実行した時と、XNA Framework Remote Performance Monitorを使った時にしか使えないことに注意してください。&lt;/P&gt;
&lt;P&gt;キャプチャ自体は非常に簡単でXNA Game Studio Device Centerでキャプチャーしたいデバイスのアイコンの右クリックメニューから&lt;STRONG&gt;Take Screen Capture&lt;/STRONG&gt;を選択するだけです。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=Untitled-1 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-1_5.png" width=422 height=364 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-1_5.png"&gt;&lt;/P&gt;
&lt;P&gt;スクリーンキャプチャーされた画像はピクチャフォルダに&lt;STRONG&gt;デバイス名-番号&lt;/STRONG&gt;というファイル名、PNG形式で保存されます。複数のスクリーン画像を続けてキャプチャーすると、デバイス名-1.png、デバイス名-2.pngといった感じに複数の画像ファイルが作られます。&lt;/P&gt;
&lt;P&gt;Xbox 360上で動作しているゲーム画面をブログなどで紹介するときには、今まではデジカメで画面を撮ったり、自前でキャプチャープログラムを書かないといけませんでしたが(&lt;A target=_blank href="http://blogs.msdn.com/shawnhar/archive/2007/01/08/capturing-screenshots-from-xbox-xna-games.aspx" mce_href="http://blogs.msdn.com/shawnhar/archive/2007/01/08/capturing-screenshots-from-xbox-xna-games.aspx"&gt;こんな方法もあったりしました&lt;/A&gt;)、これからはキャプチャー、ブログ書き込みプログラム上にドラッグ＆ドロップするだけで、以下のようなスクリーンショットをブログに載せることが簡単になりました。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=cheiron-3 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_thumb.png" width=644 height=364 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;配置の高速化&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;XNA GS 2.0以前ではXbox 360上でゲームを開発している時にゲームの配置、特にコンテントの配置に時間が掛かるという問題がありました。XNA GS 3.0ではこの問題を解決するために二つの改良が施されました。&lt;/P&gt;
&lt;P&gt;一つ目はファイルの圧縮です。&lt;/P&gt;
&lt;P&gt;XNA GS 3.0ではプロジェクトプロパティにContent Buildタブが追加され、その中にコンテントパイプラインの出力ファイルの圧縮オプションが追加されました。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=Untitled-2 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-2_3.png" width=451 height=93 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-2_3.png"&gt; &lt;/P&gt;
&lt;P&gt;デフォルトではWindows用プロジェクトでは圧縮せず、Xbox 360用プロジェクトでは圧縮するようになっています。Windows用とXbox 360用のプロジェクトでデフォルトの設定が違うのは次の理由があります。PCにはXbox 360より高速で大容量なHDDがあり、圧縮に掛かる時間に見合うだけのメリットが少ないのに対して、Xbox 360ではコミュニティゲームの150MBという容量制限があるのと、圧縮した方がコンパイルと配置の全体時間の短縮になるからです。もちろん、このオプションは自由に変えられるようになっています。&lt;/P&gt;
&lt;P&gt;圧縮率はコンテントによって左右されますが、通常は元のサイズの70%～50%程度です。中には元のサイズの25%まで圧縮されたというケースもありました。この圧縮効果によって、配置に掛かる時間は三割から二倍程度速くなりました。&lt;/P&gt;
&lt;P&gt;そして、二つ目は配置用のプログラムのチューニングです。&lt;/P&gt;
&lt;P&gt;XNA Game Studio Connectの待機画面では、メインスレッド以外の5つのスレッドは暇を持て余していたので配置プログラムをマルチスレッド用に特化させることで配置に掛かる時間が大幅に短縮されました。&lt;/P&gt;
&lt;P&gt;この二つの相乗効果によって、Xbox 360へのコンテントの配置が劇的に速くなりました。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9026372" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item><item><title>XNA Game Studio 3.0がリリース</title><link>http://blogs.msdn.com/ito/archive/2008/10/31/xna-gs-3-0-released.aspx</link><pubDate>Fri, 31 Oct 2008 11:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9026220</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9026220.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9026220</wfw:commentRss><description>&lt;P&gt;XNA Game Studio 3.0がリリースされました。&lt;A target=_blank href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&amp;amp;displaylang=en"&gt;ここからダウンロード&lt;/A&gt;することができます。細かい注意点などは&lt;A target=_blank href="http://creators.xna.com/en-US/XNAGS3readme" mce_href="http://creators.xna.com/en-US/XNAGS3readme"&gt;Readmeページ&lt;/A&gt;が参考になりますが、ここではPCへのインストールと、Xbox 360用の新しいXNA Game Studio Connectの導入の仕方について説明します。&lt;/P&gt;
&lt;P&gt;XNA Game Studio 3.0がサポートしてる開発環境はVisual Studio 2008と&lt;A target=_blank href="http://www.microsoft.com/japan/msdn/vstudio/Express/" mce_href="http://www.microsoft.com/japan/msdn/vstudio/Express/"&gt;Visual C# 2008 Express(無償)&lt;/A&gt;です。これらの開発環境を持っていない場合はXNA Game Studio 3.0をインストール前にあらかじめインストールする必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;XNA Game Studio 3.0 Beta版をインストールした人への注意点&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;XNA Game Studio 3.0のベータ版をインストールしてた人は、リリース版をインストールする前にベータ版をアンインストールする必要があります。ベータ版がアンインストールされていない状態でリリース版をインストールしようとすると以下のメッセージが表示され、インストールが終了します。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=無題 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/%E7%84%A1%E9%A1%8C_3.png" width=494 height=235 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/%E7%84%A1%E9%A1%8C_3.png"&gt;&lt;/P&gt;
&lt;P&gt;ベータ版では以下の3つのコンポーネントがインストールされています。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Microsoft XNA Framework Redistributable 3.0(Beta)&lt;/LI&gt;
&lt;LI&gt;Microsoft XNA Game Studio 3.0(Beta)&lt;/LI&gt;
&lt;LI&gt;Microsoft XNA Game Studio Platform Tools(Beta)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;これらのコンポーネントを全てアンインストールしてください。特に３番めのコンポーネントはアンインストールし忘れることが多いようです(私もよく忘れてました)。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;XNA Game Studio Connectの導入について&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Xbox 360上でゲームを開発するには、1.0と2.0で別々のプログラムを実行する必要がありましたが、3.0の新しいXNA Game Studio Connectは2.0と3.0の両方のゲームを実行、開発することができます。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=GSConnect_2 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_thumb.png" width=644 height=364 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Xbox 360の通常のゲームの場合、ゲームのバグなどを修正することができるタイトルアップデートという仕組みがありますが、新しいXNA Game Studio Connectはバグ修正ではないこと、そしてタイトルアップデートの枠内に収まりきらないということで、新しいXNA Game Studio Connectをインストールするには古いXNA Game Studio Connectを消して、新しいXNA Game Studio Connectをダウンロードするという二つのステップを踏む必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;古いXNA Game Studio Connectを消す&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;古いXNA Game Studio Connectを起動しようとすると、アップデートを促す画面が表示されるだけになっています。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Xbox 360のダッシュボード画面の&lt;STRONG&gt;ゲーム&lt;/STRONG&gt;ブレード内で、&lt;STRONG&gt;ゲームライブラリー&lt;/STRONG&gt;を選択、そして&lt;STRONG&gt;マイゲーム&lt;/STRONG&gt;を選択する&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;XNA Game Studio Connect&lt;/STRONG&gt;を選択し、&lt;STRONG&gt;ゲームを消す&lt;/STRONG&gt;を選択する。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;重要:&lt;/STRONG&gt;新しいXNA Game Studio Connectをダウンロードする前に、古いXNA Game Studioを消すようにしてください。新しいXNA Game Studio Connectをダウンロードした後に古いXNA Game Studio Connectを消した場合、Xbox 360自体がフリーズするので電源ボタンを押して電源を切る必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;新しいXNA Game Studio Connectをダウンロードする&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Xbox 360のダッシュボード画面の&lt;STRONG&gt;マーケットプレース&lt;/STRONG&gt;ブレード内で&lt;STRONG&gt;ゲームストア&lt;/STRONG&gt;を選択し、&lt;STRONG&gt;すべて: ゲーム&lt;/STRONG&gt;を選択。&lt;/LI&gt;
&lt;LI&gt;XNA Creators Clubを選択後に&lt;STRONG&gt;XNA Game Studio Connect&lt;/STRONG&gt;を選択。ダウンロードしなおすを選択すると、新しい&lt;STRONG&gt;XNA Game Studio Connect&lt;/STRONG&gt;がインストールされます。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;先に新しいXNA Game Studio Connectをダウンロードしてしまうと、画面上には二つのXNA Game Studio Connectが表示されますが、新旧のXNA Game Studio Connectではアイコンが違うので見分けがつきます。&lt;/P&gt;
&lt;DIV align=center&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=400 align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=200&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=creator_icon_2[1] src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_thumb.png" width=64 height=64 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_thumb.png"&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=XnaIcon[1] src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/XnaIcon%5B1%5D_3.png" width=64 height=64 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/XnaIcon%5B1%5D_3.png"&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=200&gt;新しい&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;古い&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9026220" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item><item><title>ClickOnce その２</title><link>http://blogs.msdn.com/ito/archive/2008/10/22/clickonce-02.aspx</link><pubDate>Thu, 23 Oct 2008 07:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9012426</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9012426.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9012426</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;スタートメニューの登録名を変更する&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;デフォルトの状態でClickOnceを使うと、インストール時にスタートメニューには&lt;STRONG&gt;プロジェクト名/プロジェクト名&lt;/STRONG&gt;のように登録されます。前回の例ではSuperCatsというプロジェクトを作ったので、SuperCats/SuperCatsのようになります。&lt;/P&gt;
&lt;P&gt;この設定の変更はプロジェクトプロパティの発行タブで行います。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/005_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/005_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=005 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/005_thumb.png" width=644 height=477 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/005_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;発行タブページは上図のようになっていて、この中のオプションボタンを押すと、以下の発行オプションダイアログが開きます。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/003_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/003_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=003 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/003_thumb.png" width=382 height=484 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/003_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;このダイアログ内の&lt;STRONG&gt;発行者名&lt;/STRONG&gt;と&lt;STRONG&gt;製品名&lt;/STRONG&gt;を変更することで、スタートメニューには&lt;STRONG&gt;発行者名/製品名&lt;/STRONG&gt;のように登録されます。ここでは、発行者名を「ひげねこ」、製品名を「超猫」とします。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/004_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/004_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=004 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/004_thumb.png" width=438 height=221 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/004_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;この状態で発行されたパッケージをインストールすると、上図のようになります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;配置マニフェストにマシン名とユーザー名が記載されるのを防ぐ&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ここでは、デフォルトの状態で配布するパッケージにはパッケージを作ったマシン名と、ユーザー名が含まれている問題を解決する方法を紹介します。これでも構わないと言う人は読み飛ばして下さい。&lt;/P&gt;
&lt;P&gt;アプリケーションを発行すると、発行先のフォルダには&lt;STRONG&gt;アプリケーション名.application&lt;/STRONG&gt;という配置マニフェストファイルが生成されます。このファイルはXMLファイルで中には発行者の情報が書かれおり、デフォルトの状態では発行者の情報は&lt;STRONG&gt;マシン名/ユーザー名&lt;/STRONG&gt;のようになります。&lt;/P&gt;
&lt;P&gt;なぜこうなっているかを簡単に説明すると、ClickOnceは発行者が発行したアプリケーションが第三者によって発行者の意図しない変更がされるのを防ぐために電子署名をするようになっていて、配置マニフェストには署名に使われた証明書の発行者名が記載されるようになっているからです。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/001_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/001_2.png"&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/002_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/002_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=002 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/002_thumb.png" width=265 height=227 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/002_thumb.png"&gt;&lt;/A&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;デフォルトでは自動的に電子署名が作られ、上図のようにプロジェクトにテンポラリ証明書が追加されます。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=001 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/001_thumb.png" width=644 height=395 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/001_thumb.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;この証明書の詳細は、プロジェクトプロパティの署名タブで見ることができます。上図では、私がテストに使っているノートブックのマシン名とユーザー名が発行者情報になってしまっています。&lt;/P&gt;
&lt;P&gt;殆どの場合は問題ないのですが、個人的な情報、例えば彼女やお嫁さん(現実、非現実含む)の名前とかをマシン名やユーザー名に使ってい場合には、その情報をネットに流出するといろいろと問題があるという人も居ると思うのでここでは電子証明書の生成のしかたを紹介します。&lt;/P&gt;
&lt;P&gt;個人でゲーム制作をしている場合、電子証明書を取得するには以下の二種類が考えられます。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A target=_blank href="http://www.verisign.co.jp/" mce_href="http://www.verisign.co.jp/"&gt;VeriSign&lt;/A&gt;などの電子証明書発行サービスを利用する(有料)&lt;/LI&gt;
&lt;LI&gt;自己署名証明書を作る&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;作ったゲームを商品として販売するには1にするべきですが、ここでは自己署名証明書の作り方を紹介します。ただし、この証明書は誰にでも作ることができるので信頼できる証明書では無いことに注意して下さい。&lt;/P&gt;
&lt;P&gt;証明書を作るには&lt;A target=_blank href="http://msdn.microsoft.com/ja-jp/library/bfsktky3(VS.80).aspx" mce_href="http://msdn.microsoft.com/ja-jp/library/bfsktky3(VS.80).aspx"&gt;makecert.exe&lt;/A&gt;を使います。このツールは&lt;A target=_blank href="http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&amp;amp;displaylang=ja" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&amp;amp;displaylang=ja"&gt;.Net Framework SDK&lt;/A&gt;やWindows SDKに付属しています。SDKのコマンドプロンプトを開いて、以下のコマンドを実行します。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;makecert -r -n "CN=John Smith" -b 01/01/2008 -e 12/31/2008 -sky exchange -ss my&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;それぞれのオプションの意味は以下のようになっています。&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=501&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=52&gt;-r&lt;/TD&gt;
&lt;TD vAlign=top width=445&gt;自己署名証明書を作成&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=52&gt;-n&lt;/TD&gt;
&lt;TD vAlign=top width=445&gt;X.500 標準に準拠した証書名、ここでは発行者名を"John Smith"としている。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=52&gt;-b&lt;/TD&gt;
&lt;TD vAlign=top width=445&gt;証明書の有効期間開始日 月/日/西暦で表される&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=52&gt;-e&lt;/TD&gt;
&lt;TD vAlign=top width=445&gt;証明書の有効期間終了日 月/日/西暦で表される&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=52&gt;-sky&lt;/TD&gt;
&lt;TD vAlign=top width=445&gt;サブジェクトのキーの種類&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=52&gt;-ss&lt;/TD&gt;
&lt;TD vAlign=top width=445&gt;作成した証明書を格納するストア名&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;ここでは、発行者名を"John Smith"としましたが、自分の好きな名前に変更することができます。また、Windows OSには電子証明書を入れておくストアと呼ばれる金庫のようなものがあり、ここでは生成した証明書をこのストアに格納しています。&lt;/P&gt;
&lt;P&gt;証明書を作ったら、プロジェクトプロパティの証明タブにある&lt;STRONG&gt;ストアから選択&lt;/STRONG&gt;ボタンを押して以下の証明書選択ダイアログを表示します。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/006_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/006_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=006 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/006_thumb.png" width=507 height=276 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce02_12E2B/006_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp; ここに、先ほど作った証明書が表示されるので、使いたい証明書を選びます。署名タブに選択した証明書が表示されているのを確認したら、発行タブを開いて、&lt;STRONG&gt;今すぐ発行ボタン&lt;/STRONG&gt;で発行すると配置マニフェストには新しい発行者が記載されることになります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;まとめ&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;二回に渡って、ClickOnceの使い方を簡単に紹介してきました。ClickOnceはもともと.Net 2.0から導入された.Netベースのアプリケーションを簡単に配布する為の仕組みです。より細かい仕組みについて興味がある人は以下のURLが参考になると思います。&lt;/P&gt;
&lt;P&gt;ClickOnceの真実 &lt;BR&gt;&lt;A title=http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html href="http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html" mce_href="http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html"&gt;http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ClickOnceを使うことで手軽にXNA Game Studio 3.0で作られたゲームを配布することができ、配布先でも必須コンポーネントを自動的にインストールしてくれるので、ゲームを遊ぶ側の負担が大幅に減っています。&lt;/P&gt;
&lt;P&gt;また、ClickOnceのサポートに伴ってXNA Framework 3.0のランタイムを必須コンポーネントとしてインストーラープロジェクトから参照できるようになったのでClickOnceではサポートされていない細かいカスタマイズを含むインストーラーも作りやすくなっています。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9012426" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/Windows/default.aspx">Windows</category></item><item><title>ClickOnce その1</title><link>http://blogs.msdn.com/ito/archive/2008/10/17/clickonce-01.aspx</link><pubDate>Sat, 18 Oct 2008 04:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9004107</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9004107.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9004107</wfw:commentRss><description>&lt;P&gt;XNA Game Studio 3.0の新機能の一つにClickOnceのサポートがあります。今まではWindows用に作ったゲームを配布するには&lt;A target=_blank href="http://blogs.msdn.com/ito/archive/2008/05/07/distribute-xna-games.aspx" mce_href="http://blogs.msdn.com/ito/archive/2008/05/07/distribute-xna-games.aspx"&gt;多くのランタイムを手動でインストールする必要&lt;/A&gt;があり、非常に不便だった問題を解決するためのものです。&lt;/P&gt;
&lt;P&gt;ClickOnceの他にも、Visual Studio上でプログラムインストール用のプロジェクト用のコンポーネントも用意されているので、簡単にXNA Game Studioで作られたゲームを再配布できるようになりました。&lt;/P&gt;
&lt;P&gt;今回は、ClickOnceを使ったゲーム配布の流れを紹介します。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;配布用のパッケージ作成&lt;/LI&gt;
&lt;LI&gt;パッケージの内容&lt;/LI&gt;
&lt;LI&gt;インストール時の振る舞い&lt;/LI&gt;
&lt;LI&gt;注意点&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;ゲーム配布用のパッケージを作る&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ゲームが完成したら、Visual Studio 2008上のビルドメニューから&lt;STRONG&gt;{プロジェクト名}の発行&lt;/STRONG&gt;を選択します。ここでは例としてSuperCatsという名前のプロジェクトを使います。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=image00 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/image00_3.png" width=412 height=189 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/image00_3.png"&gt;&lt;/P&gt;
&lt;P&gt;以下の様な発行ウィザードが表示されます。もっとも手っ取り早い方法は、アプリケーションを発行する場所を適当な位置を指定した後に、完了ボタンを押すだけでプロジェクトのビルドと、配布用のパッケージが作られます。&lt;/P&gt;
&lt;P align=center&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-01_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-01_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=無題-01 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-01_thumb.jpg" width=530 height=484 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-01_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;STRONG&gt;パッケージの内容&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=left&gt;ウィーザードで発行先に指定したフォルダ(ここではtmp/public)には以下のフォルダやファイルが作られます。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV align=left&gt;Application Filesフォルダ&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV align=left&gt;setup.exe&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV align=left&gt;{プロジェクト名}.application&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P align=left&gt;パッケージ全体のサイズは元々のゲームのサイズ+500KB程度になります。注:ベータ版では+5MB程になっていました。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-06_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-06_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=無題-06 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-06_thumb.png" width=643 height=484 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/clickOnce01_1059E/%E7%84%A1%E9%A1%8C-06_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;後はこの二つのファイルとフォルダをzipファイルなどにまとめて自分のサイトにアップするだけです。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;インストールの振る舞い&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;配布用のパッケージをダウンロードし、setup.exeを実行するだけで、ゲームのインストール、そして実行までが自動的に行われます。&lt;/P&gt;
&lt;P&gt;この時、setup.exeはゲームを実行するのに必要な以下のコンポーネントがインストールされているかをチェックします。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;.Net Framework 3.5&lt;/LI&gt;
&lt;LI&gt;XNA Framework 3.0&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;もし、これらのランタイムがシステムにインストールされていない場合は、自動的にそれらのコンポーネントをネットからダウンロードし、インストールします。.Net Framework 3.5をインストールしていない環境の場合、最初のインストールに時間が掛かる事に注意して下さい。&lt;/P&gt;
&lt;P&gt;XNA GS 2.0の時にはフレームワークが使っているDirectXのランタイムは別途インストールする必要がありましたが、XNA GS 3.0ではそれらのコンポーネントもXNA Framework 3.0のランタイムにまとめられています。&lt;/P&gt;
&lt;P&gt;また、インストールされたプログラムはデフォルトの状態ではスタートメニューにのプロジェクト名のフォルダと、その下にショートカットが作られます。&lt;/P&gt;
&lt;P&gt;アンインストールする場合は、他のアプリケーションと同じようにプログラムの追加/削除メニューからアンインストールすることができます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;注意点&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ClickOnceのサポートによってゲームの配布が簡単になりましたが、残念ながらGame for Windows Liveのランタイムは再配布パッケージの中には含まれないので、ネットワーク対応のゲームやGamerServices名前空間の機能を使っているゲームを他のマシンで遊ぶにはXNA GS 3.0をインストールする必要があります。&lt;/P&gt;
&lt;P&gt;また、今回紹介した方法だと.applicationファイル内に発行したマシン名とユーザー名の情報が記録されるので、これらの情報を公開したくない人は注意して下さい。この解決方法と、スタートメニューに登録される名前をプロジェクト名から好きな名前に変更する仕方などは次回紹介します。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9004107" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/Windows/default.aspx">Windows</category></item><item><title>XNA Game Studio 3.0のリリース日が正式決定</title><link>http://blogs.msdn.com/ito/archive/2008/10/17/xna-game-studio-3-0-is-coming.aspx</link><pubDate>Sat, 18 Oct 2008 02:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9003959</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9003959.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9003959</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://creators.xna.com/en-us/xna_goes_live_october30th" mce_href="http://creators.xna.com/en-us/xna_goes_live_october30th"&gt;XNA Game Studio 3.0のリリース日が正式決定&lt;/a&gt;されました。&lt;/p&gt;
&lt;p&gt;北米西海岸時間で１０月３０日、日本時間の１0月30日の夕方～31日早朝頃までにリリースされます。&lt;/p&gt;
&lt;p&gt;また、１１月の１９日のXbox 360アップデートと同時に北米、カナダ、イギリス、フランス、イタリア、そしてスペインの6カ国でコミュニティゲームが正式運用開始になります。&lt;/p&gt;
&lt;p&gt;コミュニティゲームへ投稿するゲームはXNA GS 3.0で作られている必要があるので、サービスが開始される国に住んでいて、サービス開始初日にゲームを投稿したい人達にとっては20日間ほどの2.0から3.0へ移行、そしてテスト期間があります。&lt;/p&gt;
&lt;p&gt;日本でも来年前半にコミュニティゲームが正式運用される予定なので、日本への配信はもちろん、世界へ向けての配信もできるので自分の作ったゲームを配信してみたいという人は是非3.0を使ってみて下さい。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9003959" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/_A430F330C730A330FC30BA30B230FC30E030_/default.aspx">インディーズゲーム</category></item><item><title>XNA Game Studio 3.0 CTP公開</title><link>http://blogs.msdn.com/ito/archive/2008/05/07/xna-3-0-ctp.aspx</link><pubDate>Thu, 08 May 2008 03:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8468108</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/8468108.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=8468108</wfw:commentRss><description>&lt;P&gt;XNA Game Studio 3.0 Community Technical Preview (CTP)が公開されました。CTPは正式リリースでは無くベータの前段階、つまりアルファ版といった感じです。主な機能は以下のようになっています。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Zuneのサポート(市販のZuneがあれば無料でゲーム作成できる) 
&lt;UL&gt;
&lt;LI&gt;SpriteBatchベースのグラフィクス 
&lt;LI&gt;Ad-hoc WiFiのサポート(既存のネットワークAPIがそのまま使える) 
&lt;LI&gt;メディアライブラリAPI&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Visual Studio 2008のサポート 
&lt;LI&gt;wav,mp3,wmaなどのオーディオメディアの再生機能&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Zuneは北米で発売されている携帯メディアプレイヤーで、それに合わせてXNAフレームワークにはZune内にあるオーディオファイルの列挙と再生ができるAPIが追加されています。&lt;/P&gt;
&lt;P&gt;ZuneはXACTがサポートされていませんが、変わりにシンプルなオーディオ再生機能であるSoundEffectクラスが追加され、この機能はWindows上でも使うことができます。このSoundEffectはメモリから効果音などを再生するのに適しています。そして、BGMなどに適しているのは新しく追加されたSongクラスです。&lt;/P&gt;
&lt;P&gt;どちらの場合も、他のコンテントと同じくプロジェクトにwav,mp3,もしくはwmaファイルを追加することで実行時に使用することができます。&lt;/P&gt;&lt;PRE class=code&gt;using Microsoft.Xna.Framework.Media;

&lt;SPAN style="COLOR: #2b91af"&gt;Song &lt;/SPAN&gt;song = Content.Load&amp;lt;&lt;SPAN style="COLOR: #2b91af"&gt;Song&lt;/SPAN&gt;&amp;gt;(&lt;SPAN style="COLOR: #a31515"&gt;"MySong"&lt;/SPAN&gt;);
&lt;SPAN style="COLOR: #2b91af"&gt;MediaPlayer&lt;/SPAN&gt;.Play(song);

&lt;/PRE&gt;
&lt;P&gt;この新しく追加されたAPIによって、XACTを介さずにオーディオ再生ができるようになりましたが、これらはXACTの機能を完全に代替するわけではないので、3DオーディオやRPCといつたより複雑な処理をする為には今まで通りXACTを使う必要があります。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Visual Studio 2008のサポートはXNA GS 3.0はC#をサポートしているVisual Studio 2008のどのエディションでも使うことができ、それには&lt;A href="http://www.microsoft.com/japan/msdn/vstudio/express/" target=_blank mce_href="http://www.microsoft.com/japan/msdn/vstudio/express/"&gt;Visual C# 2008 Express Edition(無料)&lt;/A&gt;も含まれています。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;他にXNA GS 3.0 CTPを使うのに必要なのこととして&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;VS 2008かVisual C# 2008 Express Editionが必要。XNA GS 3.0はVS 2005はサポートしません。XNA GS 3.0は XNA GS 2.0とサイド・バイ・サイドで動作するので、XNA GS 3.0を使うのにVS 2005をアンインストールする必要はありません。 
&lt;LI&gt;CTP版ではXbox 360をサポートしておらず、WindowsとZuneのみの対応になっています。Xbox 360で開発するにはXNA GS 2.0を使う必要があります。 
&lt;LI&gt;現状ではZune開発環境は64bit版OS上では動作しません(Zuneとの接続に失敗する)。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;と、いうわけでCTPの主な機能はZuneサポートに関するものですが、VS2008対応とオーディオメディア再生機能は他のプラットフォームでも使える機能なので、ホリデーシーズンの正式リリースまで待てないという人にはダウンロードする価値はあると思います。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;XNA GS 3.0 CTPは以下のリンクからダウンロードできます。&lt;/P&gt;
&lt;P&gt;&lt;A title=http://www.microsoft.com/downloads/details.aspx?FamilyId=DF4AF56A-58A7-474C-BFD0-7CF8ED3036A3&amp;amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DF4AF56A-58A7-474C-BFD0-7CF8ED3036A3&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DF4AF56A-58A7-474C-BFD0-7CF8ED3036A3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=DF4AF56A-58A7-474C-BFD0-7CF8ED3036A3&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8468108" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item><item><title>XNA Game Studio 3.0の新機能</title><link>http://blogs.msdn.com/ito/archive/2008/02/20/xna-game-studio-3-0-and-zune.aspx</link><pubDate>Thu, 21 Feb 2008 02:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7825320</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/7825320.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=7825320</wfw:commentRss><description>&lt;P&gt;GDC2008で、XNA Game Studio 3.0の新機能の１つが発表されました。それはWindows、Xbox 360に加えて新たに&lt;A href="http://www.zune.net/en-US/" target=_blank mce_href="http://www.zune.net/en-US/"&gt;Zune&lt;/A&gt;がサポートされるようになったことです。&lt;/P&gt;
&lt;P&gt;日本では未発売のものですが、Zuneは携帯メディアプレイヤーですが他のプラットフォームと同じようにXNA Game Studioを使ってゲーム開発をすることができます。Xbox 360のように贅沢なGPUとかは搭載していませんし、スクリーンの解像度は違いますが、2Dベースのゲームであれば他のプラットフォームで書いたコードがほぼそのまま使えるようになっています。&lt;/P&gt;
&lt;P&gt;そして、Zune独自の機能として自分のお気に入りの音楽をゲーム中にBGMとして流したり、映像データをテクスチャとして使うことができるメディアAPIが追加されました。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;XNA Game Studio 3.0は春頃にレビューリリース予定で、最終リリースは今年のホリデーシーズンを予定しています。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7825320" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Zune/default.aspx">Zune</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item></channel></rss>