スポンサーサイト

--年--月--日
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XNA:ソースコードの整理

2010年06月25日
ネットワークはクライアント・サーバータイプにすることにしました。
で、ネットワークパケットの送受信部分を書こうと思ったのですが、キー入力関係のメソッドがパッド入力に依存しまくりのベタ書き状態で、まずはコードの整理から始めなければならない事態に、、、

コードを最適化したら2000行ぐらい減ったので、かなり可読性と管理が楽になりました。この状態をベースにネットワーク関係のコードを追加しようと思っています。

//メモ書き
PlayerIndex列挙型を使う時に「PlayerIndex.One」をintにキャストした時ってのは、0だという事実を今更ながらに気が付きました。ずっと1だと思ってました(汁

まだまだ先は長そうです。
スポンサーサイト

XNA:セッション画面ほぼ完成

2010年06月21日
レイアウトがまだ固まっていないのですが、おおまかにセッション画面が完成しました。

XNA_20100621
画面の左側半分はセッションを作成したプレイヤーのゲーマータグを表示します。
右半分はカーソルで選択しているセッションの情報が表示されます。対戦マップ、勝利ポイント、ラウンド制限時間
という感じです。
この情報は「セッションプロパティ」の情報を参照すれば容易に取得できます。当然セッションを作成する時にセッションプロパティをNetworkSessionオブジェクトに与えておかなくてはいけません。

この画面でやり残している作業は、、、
1.レイアウトを固めて見栄えを良くする
2.Y:Create Session X:Find Session といったキー操作の説明を画面の下のほうに描画
3.ゲーマータグの横に、セッションに参加している人数を表示。出来ればPing値も表示したい
4.ゲーマータグの国籍アイコンの表示
といった感じでしょうか。まだまだセッション画面の作業は続きそうです。

最近は天気が悪く湿気が凄いです。じめじめした布団に、ヌメヌメと潜り込もうと思います。
おやすみ~ ノシノシ


Kinect(Project NATAL)について思う事

2010年06月18日
E3 2010で新型のXBOX360や新作ラインナップなどの発表が多数ありましたが、「Project Natal」として前々から紹介されていたモーションセンサーコントローラーの正式ネームが「Kinect」として正式に発表されました。

このKinectは被写体の深度情報を元に3次元の動きを検知できるデバイスで、全身を使ったゲームの操作を行えるというものです。
前々から思っていたのですが、KinectがPCで使えれば「モーションキャプチャーデバイス」として自作の3Dモデルにモーションを付けれるんじゃないだろうか?という妄想です。

プロの世界で使われているモーションキャプチャー用の機材は凄く高価で、到底アマチュアの手の届くものではありません。
たまに見かける「製作現場の舞台裏」的なコラムや動画を見ていると、モーションデーターを作っている現場はまさに「スタジオ」という感じです。

Kinectは新型の360本体には専用の接続コネクタがあるらしいのですが、現行の本体にはUSBで接続するらしいです。
USBならPCにも物理的に接続できるので、個人向けモーションキャプチャーデバイスとしては破格の性能と価格です。

いつかXNAで使用できる日がくるといいな~と思いつつ、お布団に潜り込みたいと思います。

XNA:やっとこさセッションの検索に成功

2010年06月17日
ここ数日、XBOX360側ではセッションが作られているのに、PC側でそのセッションが検索結果に出てこないという事態で悶絶しておりました(汁
今しがた問題は解決できたのですが、参考になるかは別として覚書程度に書いておきます。

//memo
まず、セッションの作成は「NetworkSession.Create」メソッドでセッションオブジェクトを作成します。
これは簡単です。XNA万歳!

次に、セッションの一覧を取得します。これは「NetworkSession.Find」メソッドで「AvailableNetworkSessionCollection」オブジェクトを取得します。この中にセッションの数やホストのゲーマータグ名などの情報がまとめて放り込まれます。

XBOX360でセッションを作成して、PCでセッションの検索をすると、、、、
セッションが一つもありません。これは大問題です。
360側は間違いなくセッションの作成に成功していて、ホストとして待機中なのですが、PC側はそのセッションを見つけてくれません。
結局何が問題だったかというと、「networksession.Update()」の記述が足りなかったせいです。

NetworkSession.Createメソッドでセッションを作成した後は、毎フレーム「.Update()」をコールしなければならなかったようで、これに気が付くまでに数日かかりました(汁
XNA3.1のリファレンスヘルプの「方法 : ネットワーク セッションの検索および参加」のドキュメントで.Update()の事は何も記載されてなかったんだもん!
//memo end

リファレンスヘルプの「方法 : ネットワーク セッションを作成する」「方法 : ネットワーク セッションの検索および参加」の項目を参考にすれば万事OKという軽いノリでロビー画面を作っていましたが、おかげさまでかなり時間がかかってしまいました。しかもまだセッションホストのゲーマータグを表示しているだけで、まだ作業は残っています。
最低限の部分だけがやとこさ出来たという現状です。
XNA_20100617
上の画像がセッションの検索結果を表示しているPC側の画面です。
PC⇔360のシステムリンク扱いなので、セッションは1個しか作成できません。結果として360側のゲーマータグがホスト名として表示されています。(一応コード上では複数のセッションがあったら全部縦に並べて表示するようにはしていますが)

なんかこの先も苦行が続きそうな予感がします(汁

XNA:セッションの作成と列挙

2010年06月10日
クリエイターズクラブのサンプルを参考に、セッションの作成とセッションの列挙部分のコードを書いています。

タンクに実装する仕様としては、セッション選択画面が表示された時点で、現在あるセッション(ホストのゲーマータグ名)を全て列挙し、選択して参加という感じにしようと思っています。
対戦時間とか勝利KILL数などでセッションを絞り込むのは、対戦ルールが増えてからでいいかなと思っています。
「チーム戦」で絞るとか、「制限時間」で絞るとか、「勝利KILL数」で絞るとか、、、市販ゲームで言う所の「カスタムマッチ」検索ですね。
あと、戦闘中のセッションへの途中参加と、ホストが途中退室した際のホスト移管は付けておこうと思ってます。

コードと書いている内に、まだぼんやりとですがXNAのネットワーク周りの事がわかってきたような気がします。

XNA:メニュー項目の追加

2010年06月05日
ネット対戦機能を目的とした第一歩は、タイトル画面のメニュー項目の追加です。
XNA_20100605

とりあえず、「Split Screen」「XBOX LIVE」「Back」を追加しました。
今書いてて思い出しましたが、システムリンクの事をすっかり忘れてました。テストは360⇔PCで通信させるので必須項目ですね(汁

タイトル画面の「MultiPlayer Game」を選択すると、入れ子で上記のメニューに切り替わります。至ってシンプルです。
「Split Screen」を選択した時は、今まで通り「マップ選択画面」に切り替わります。
「XBOX Live」「System Link」の時はセッション選択orセッション作成用の画面に移行するという感じにするつもりでいます。

セッション画面では、いろんな項目を表示しなければなりません。
ホストプレイヤーのゲーマータグ名、現在の参加人数、マップ、KILLカウント、対戦時間など色々です。
ロストプラネットのオンラインをしている時はホストの国旗アイコンが表示されていたので、参考にしたいと思います。

とりあえず、次の作業はセッション画面用のクラスの作成です。

XNA:DESTRUCTION TANKの今後

2010年06月04日
XNA関係の事を久しくやっていなかったので、今後の活動方針とかを考えてみようかとおもってます。
まず、DESTRUCTION TANK(以下タンク)の今後ですが、凶悪なバグの報告はすっかりなくなったので安定して動作している状態です。
このバージョンをベースにして、次回作のテストベット的な役割をしてもらおうと思います。

具体的にはLive対戦を追加して、ネット対戦対応ゲームにするのがまず最初の段階。
次に2on2のチーム戦などの対戦ルール追加。観戦モードもあったら面白いかも知れません。
ネット対戦の追加が終わったら、次回作の作業をやりはじめようと思います。

ロビー画面とか対戦の途中参加有り無しとか、細かい事を考え始める突然眠気に襲われます、、、
また前のように、地味にヌメヌメやっていきますので、生暖かい目で見てやってください。


 | HOME | 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。