« 2007年3月 | トップページ | 2007年8月 »

2007年5月

2007.05.25

[XNA]:文字列描画

さて、ゲームプログラムにしろ別のプログラムにしろ、デバックしたりなんだりで便利なのは文字列の描画だ。

どのXNA関連のブログやらHPやらではXNA Game Studio Express (以後GSE)1.0 Refreshで文字列描画の機能が追加されたとある。

特にXNA愛好家が愛読している(であろう)「ひにけにXNA」さんには日本語等の取り扱いを便利にするコンテント・パイプライン(カスタムインポーター・カスタムプロセッサ)についての解説がなされている。

このコンテント・パイプラインというやつは、おそらく私たち開発者が日ごろ行なっているmake作業のリソース部分を表しているようだ。
代表するならプログラムをビルド(コンパイル・リンク)するときにmakeやantを使うとしよう。
その中によくリソースのデータコンバート部分を含めることが多い。
その主な内容はコンバータやシェルスクリプト等の起動だったりするわけだが、それに近いことをC#で書いてやってしまおうといった感じに受け取れた。
最終的なコンバート作業をインポーター・プロセッサといったもので実行し、XNBというファイルにすることでどんなリソース(コンテント)も共通した方法(アセット)で取り扱いましょうということらしい。

おそらくサウンドだろうが3Dモデルやそのアニメーションだろうが、テクスチャだろうが、ゲームスクリプトだろうがこのXNB
(※たぶんこれがアセット?)ってやつにして取り扱うんだろう。
そんで独自のフォーマット等を取り扱いたいときにインポーターやプロセッサ部分を書いてねん…ってことなんだな…きっと。

※不便なようで便利な…けど、ある程度の制約がある方がやれることが多くて自滅するよりかはいいか?と思う。

さて、いきなり「ひにけにXNA」さんのようなカスタムインポーターやプロセッサ部分を書いてしまうのもありだけど、文字列描画の基本を知ってからのほうが、きっと問題点やその理由をきっと理解しやすいだろう。

文字列描画の基本については「ん・ぱか工房」さんの「XNA Game Studio メモ」の「はじめてのXNAアプリの作成」にすでにあったので、「どうしたらいいのかもわかんね~」という方はそれを参照しながらならなんとかいけると思う。

私もWindows版のサンプルを作成してみた。

「FontSample4Win.zip」をダウンロード

一応2種類のフォントを取り扱ってみた。

それとまぁフォントを取り扱うクラスでよくあるんだけど、LineSpacingというSpriteFontクラスのメンバ変数はフォントを描画する上での行の高さらしい。結構行間も空くので、おそらくそれも含まれた高さなんだろう。

ビルドしてみて、できあがった.xnbというファイルにも注目してもらいたい。
アルファベット+日本語カタカナのMS UI Minchoの方はだいたい264KB。
フォントのサイズも14ポイントと結構小さめなのだが、これでひらがなや漢字を追加するとなるとかなり大きくなるのではないかと予想する。
もっと大きなフォントを使いたいときはポイント数を上げるという方法もあるが、ためしに92ポイントという大きさのフォントを設定して.xnbを作成してみると約8MBのファイルが出来上がる。
小さいフォントを作成してSpriteBatchクラスの拡大で画像的に耐えられるなら、そっちの方がファイルサイズとメモリの節約になるだろう。
※私がいままでWindowsのゲームを作成するときのフォントは必要な文字列を抽出して、16階調のαデータ(つまり1ピクセル4ビット)を1バイト2ピクセル分につめてデータ化したものを必要なときにテクスチャに展開して使用していた。
そのデータを使えるようにするのも楽しそうだが、良く考えてみるとフルHDとか騒がれている昨今、16階調のアンチの効いたフォントくらいじゃ、もしかしたら粗が目立つのかもしれない。

この.xnbにはおそらくフォントがBMP化されたものとその他もろもろのものが入っている(と思う)。
このSpriteFontのロードとアンロードは好きなときにできるようだから、必要なシーンでローディングをはさめば、テクスチャメモリの方はなんとかなる…よね。※この仕組みでか○い○ち級のノベル系アドベンチャーの時は心配かも

おそらく問題となるのはディスク格納領域…つまりゲーム自体の容量の問題につながる。
ゲーム自体の容量制限については調べてないのでわからないが、XBOX360に転送する過程を考えると小さいにこしたことはないだろう。
それに学生たちがコンテストなんかに参加しようとすると、コンテストの規約で「インストールされた状態で200MB以内ね」とちゃんと制限されていたりする。
フォントの他にもサウンドだってグラフィックだってあるし、それらのデータ量は大きい。
なんで、ぽんぽこSpriteFont用の.xnbを作成するわけにはいかない。
最終的には圧縮かな…と思っていたらこんな方がいらっしゃった。
まぁ、まだまだ気にするレベルにも達していないので、もし容量でなんかあったら参考にさせてもらおう。(学生は容量に関しては無頓着なもの)

ここまでで、「ひにけにXNA」さんのような方式を導入する前に自分で感じる部分をまとめると
・.spritefontファイルの作成は自動化すべき
・使い方はそんなに難しくない
・出来上がる.xnbファイルは容量がデカイ(きがする)
・ロード・アンロードは容易。

自動化の部分は
・ソースコードで使われているデバック文字を.spritefontファイルにする。
・たとえばシナリオスクリプトから文字を抽出して.spritefontファイルにする。
とかできればいいのかな。

| | コメント (0) | トラックバック (0)

2007.05.23

[XNA]:XBOX360での実行

突然だが、職業上逃げることができなくなったXNA。
けど本当に良くできていて、CやC++でDirectXなプログラムをゴリゴリ書いていた自分が数日むなしくなるような…。※いや、必要なんだけどね。

ってなもんで、XNAを真面目にやろうと、面白いし、久しぶりにワクワクしたし。

今はまだ別件の外注作業の方が優先なのだが、これの研究開発にもお金が出ているので、平行して20%くらいはこれをやらなきゃいかん。※私のCPUはいっぱいいっぱいの気が…。これ以上スレッド立てたらパンクですわ。2スレッドが限界か?しょぼ…。

とりあえずサンプルは充実しているし、こぞって色々な人が参戦模様をブログ等で公開してくれているので、情報には困らない。

さて、ある日のこと。※って昨日じゃん
研究開発要請元から「XNA Creators Club」なるものの年間メンバーシッププリペードコードが送られてきたので、今までPC環境で実験していたサンプル等をXBOX360で実行してみることにした。

ちなみに開発環境は整えられ、XBOX360とPCはすでに繋がっているものとする。
PCとデータを共有して音楽やムービーが見れる状態がそれだ。
Windows Media ConnectってやつがPC側にインストールされていることが条件に入るが、私の場合はWindows Media Player 11
(以後WMP11) の共有機能がそれにあたるらしいので、WMP11のオプションを開き、「ライブラリ」タブの「共有の構成」あたりを設定したと思う。
それと、たしかWindows Live IDやXBOX Liveのメンバーシップの登録等、XBOX360側のアカウントがしっかりしていないとダメだったと思う。
詳しくはXNA関連の正式なホームページや他の方々の書き込みを読んで欲しい。

まずはXBOX360側をいじる。※内容は2007/5/23現在
XBOX360の電源を入れてダッシュボードを表示する状態にする。
マーケットプレースというタブ(?)のゲームを選択。
ジャンル→その他と選択して行くと「XNA Creators Club」という項目があるので選択。
あとは、XNA Game Launcherを選択してダウンロード&インストールしよう。

ここで「XNA Creators Clubメンバーシップ」を購入することもできるので必要がある人はXNA Game Launcherを入れる前に、購入・登録しておくべし。
※私の場合はすでにプリペードコードを研究開発要請元からもらっていた。
ちなみに、私と同じようにプリペードコードをいただいて始める方は、同じくマーケットプレースの右下あたりに「ご利用コードを使う」という項目があるので、そこを選択し、プリペードコードを入れれば、めでたくアカウントにXNA Creators Clubメンバーシップが追加される。

XNA Game Launcherがインストールされたら、ダッシュボードの「ゲーム」タブ(?)の「デモなど」という項目を選択。
ここにXNA Game Launcherの項目があるはずなので選択して、次に「始める」を選択する。
これでXNA Game Launcherが立ち上がるはず。
私の場合は立ち上がった初回、選択できるのはSettingsの項目だけだった。
なのでSettingsを選択する。
「Generate Connection Key」を選択して表示されたkeyをメモする。
XNA Game Launcherの先頭に戻って、「Connect to Computer」を選択して、PCからの待ちうけ状態にする。
これでXBOX360側の準備はOKのはずだ。

次にPC側。
動く、XBOX360版(くれぐれもWindows版ではない)のXNAプロジェクトをなんでもいいのでXNA Game Studio Express(Microsoft Visual C# 2005 Express Edition)で立ち上げる。
ツール→オプション→「XNA Game Studio Express Xbox 360」を選択して「add」ボタンを押す。
するとダイアログボックスが立ち上がるのでConnection Keyのところに先ほどメモしたものを入れる。
このとき「Xbox 360 Name」という項目があって、私は?だったが、とりあえずXBOX360で遊ぶときのサインインするときのアカウント名(ゲーマータグ名?)を入力した。
そして「Test Connection」ボタンを押す。
すると接続に不具合があった場合Statusの部分に英語で色々言ってくるので、読みながら設定して行く。
私の場合は最初「つながんねーよ」みたいなわけわからん内容だったので再度Test Connectionボタンを押したらきちんとXBOX360をローカルネットワークから発見してくれて、Status部分に「TCPのポート1001あけてちょ」と英語で書いてあったので、Nortonのファイアウォールの設定でローカルIPでの通信に限りポート1001での通信を許可する設定をする。
その後、再度Test Connectionボタンを押すと無事繋がった。
無事繋がるとOKボタンが有効になるので、それを押して設定を終了する。

あとはプロジェクトをビルドして実行すればXBOX360と通信してデータをXBOX360側に送信完了後、めでたくXBOX360で動き始めるはずだ。

ちなみに、XNAで製作したものはパッケージにして配布することが可能で、その場合もXBOX360側を受け待ち状態にしてからunpacボタンを押せば、XBOX360側にデータが送られる。

プロジェクトで実行してもパッケージをインストールしても一度データが送られたものならXNA Game Launcherの「My Games」の項目を選択すれば、PCと繋がっていなくても実行できるようになる。
不必要になったものも、ここから選択して削除しないと、どんどんXBOX360側のハードディスク容量が減っていくことになる。

私の場合はざっとこんなもんだった。
ゲーム機開発は散々やってきた私でも、実機で何か動くとうれしい気がする。
学生たちがこれを経験したとき、感動してもらえるんじゃないかと今から楽しみだ。
※あっ、これじゃー研究開発要請元がわかっちゃうね。

| | コメント (0) | トラックバック (1)

3g2 がQuickTimePlayerで再生できない

私の携帯電話はauのCASIO製W41CA。

久しぶりにこの携帯電話でムービーを撮ったので、PCにバックアップ。
W41CAで撮ったムービーをPCにバックアップすると.3g2という拡張子のファイルがコピーされます。
このファイルをPCで見るにはQuickTimePlayerのインストールが必要です。

…で今まではQuickTimePlayer(※バージョンは7.1.6)で見れていたはずなのに、今日バックアップしたファイルや昔のファイルを見ようとしたら、音は出るのに画面は白いまま。

あちゃー…よくファイルに合ったコーデックが無いときにこんな現象になるけど…今まで見れていたのになぁ…???。
と思いながらも、おもむろにアンインストールしてから再インストールしてみる。
結局ダメ。
うーん?と思い、もう一回アンインストールして、消えていないファイルがないか確認。
するとインストールされたフォルダの下に\QTComponentsというフォルダの中に3ivxD4_451.qtxというファイルがコロンと残っていた。
ははーん?とこれを一応別の場所に移動して再インストール。
すると無事に再生されるようになった。(あー良かった)

再インストール後に\QTComponentsフォルダを見てみたけどなーんにもない。
移動しておいた3ivxD4_451.qtxを\QTComponentsフォルダにコピーして再生すると、やっぱり音だけで画面は白い状態に。

そーいや3ivxD4とかいうコーデックをインストールしたけどエンコーダーには使用期限があったらしく、ダイアログがうざくてアンインストールしたんだっけか…。
アンインストールしたのにこのファイルだけ残って悪さしたんだろうか?

暇があったらもう一回3ivxD4インストールしてどうなるか確認しようかな。

| | コメント (0) | トラックバック (0)

« 2007年3月 | トップページ | 2007年8月 »