トップページgamedev
1001コメント442KB

【Xbox360】 XNA Game Studio その5 【C#】

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/03/25(火) 13:57:55ID:DksURoh7
前スレ
【Xbox360】 XNA Game Studio その4 【C#】
http://pc11.2ch.net/test/read.cgi/gamedev/1198312422/

XNA Developer Center http://msdn.microsoft.com/directx/XNA/
XNA Game Studio Express http://msdn.microsoft.com/directx/xna/gse/
XNAをはじめよう! http://xna-studio.jp/

■ゲ製wiki
プログラミングガイドなど、基礎技術情報が豊富
http://www23.atwiki.jp/news4xna/

■ゲハwiki
フリーのライブラリ情報などが豊富
http://www16.atwiki.jp/xna360

■マインスイーパ
C#をすでに習得している人向け
http://www.microsoft.com/japan/msdn/vstudio/express/learn/xna/default.aspx
0002名前は開発中のものです。2008/03/25(火) 14:22:41ID:xi89BAa8
>>1
いつの間にかスレ終わって建てようかと思ってたら建っていた
0003名前は開発中のものです。2008/03/25(火) 14:52:44ID:OIbRRAHq
今回は建設的な話題になりますように・・・
0004名前は開発中のものです。2008/03/25(火) 17:10:39ID:0b+2Ojrd
         し!     _  -── ‐-   、  , -─-、 -‐─_ノ
  M C     // ̄> ´  ̄    ̄  `ヽ  Y  ,  ´     )Power え
  A P    L_ /                /        ヽPCx3 |
  C U    / '                '           i  !? マ
  で ま    /                 /           く    ジ
  も で    l           ,ィ/!    /    /l/!,l     /厶,
  な サ   i   ,.lrH‐|'|     /‐!-Lハ_  l    /-!'|/l   /`'メ、_iヽ
  い |   l  | |_|_|_|/|    / /__!__ |/!トi   i/-- 、 レ!/   / ,-- レ、⌒Y⌒ヽ
  よ ド   _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ      ,イ ̄`ヾ,ノ!
  |(笑) 「  l ′ 「1       /てヽ′| | |  「L!     ' i'ひ}   リ
        ヽ  | ヽ__U,      、ヽ シノ ノ! ! |ヽ_、ソ,      ヾシ _ノ _ノ
-┐    ,√   !            ̄   リ l   !  ̄        ̄   7/
  レ'⌒ヽ/ !    |   〈       _人__人ノ_  i  く            //!
人_,、ノL_,iノ!  /! ヽ   r─‐- 、   「      L_ヽ   r─‐- 、   u  ノ/
      /  / lト、 \ ヽ, -‐┤  ノ  キ    了\  ヽ, -‐┤     //
ハ キ  {  /   ヽ,ト、ヽ/!`hノ  )  モ    |/! 「ヽ, `ー /)   _ ‐'
ハ ャ   ヽ/   r-、‐' // / |-‐ く    |     > / / `'//-‐、    /
ハ ハ    > /\\// / /ヽ_  !   イ    (  / / //  / `ァ-‐ '
ハ ハ   / /!   ヽ    レ'/ ノ        >  ' ∠  -‐  ̄ノヽ   /
       {  i l    !    /  フ       /     -‐ / ̄/〉 〈 \ /!
0005名前は開発中のものです。2008/03/25(火) 18:21:05ID:LakyMHmF
>>1
マインスイーパなんて加えるなよ
もっと有益なブログが沢山あるだろうが・・・

そうやって一生自作自演してろ
心の中ではみんな誰もおまえのことを認めてくれねーぞ
0006名前は開発中のものです。2008/03/25(火) 19:30:10ID:u4OuqSog
>>5
だったら自分で載せろよ

粘着のほうが見苦しいわ
前スレで何回連続でレスしてたんだか
0007名前は開発中のものです。2008/03/25(火) 21:37:08ID:LakyMHmF
>>6
はいはい擁護乙
ただの埋めに何言ってるの?

つーかもうこんなスレ見ねーよ
今まで親切にレスしてたのが馬鹿らしい
0008名前は開発中のものです。2008/03/25(火) 21:53:44ID:Yb5dnedP
はいはい、池沼さんさようなら
0009名前は開発中のものです。2008/03/25(火) 22:14:00ID:MCdo/Bj3
見ない宣言来たんだからそこは生温かくスルーしとき。

捨てゼリフに対して煽る

やっぱり気になって見にきたら煽られてたので
売り言葉に買い言葉で煽り返す

見ないんじゃなかったのかよ

もう見ねーよ

最初に戻る
0010名前は開発中のものです。2008/03/25(火) 23:16:01ID:dO0zbCK8
XNAって、それをやるための魅力が少ないんだよな。
少なくともPC上のゲームを作る場合、何もいいことが無い。

Directxより楽か > どんぐりの背比べ。このくらいなら自前でラッパー作った方が・・・。
入力周りは > 結局MDX使うの?
実行環境は > XNAframework入れてる非開発者っているの?

0011名前は開発中のものです。2008/03/25(火) 23:26:52ID:OdHqJnjy
>>10
お前はやらなくていいから失せろ
0012名前は開発中のものです。2008/03/26(水) 00:11:10ID:Na6PWth9
あれ、何でそんな否定されたんだ
要するにXNAを使う以上は、箱○と連携しろってことでしょ
0013名前は開発中のものです。2008/03/26(水) 05:38:11ID:qWpHf1XT
何の問題もわかってない社員か信者が脊髄反射してるだけだよ。
XNAをより良いものにしたいのに、じゃあ使うな、失せろとか言い出す短絡的なガキが多くて困る。
0014名前は開発中のものです。2008/03/26(水) 08:19:57ID:K/hsrszi
また出たw
0015名前は開発中のものです。2008/03/26(水) 08:24:56ID:A56vr9uk
>>13
文句はいいからなんか作れよw
0016名前は開発中のものです。2008/03/26(水) 10:13:40ID:FA6HbGK3
>>10
手軽な2Dゲー作りたい人には敷居が高く
バリバリ3Dゲー作りたい人には物足りない

お手軽なはずのC#をろくにフレームワークも用意せずに
パフォーマンス重視のゲーム用途に使ったために
何がしたいかわからなくなってる。

それに本当にお手軽に開発できるのであれば
マインスイーパーの連載が2,3回で終わる程度の規模じゃなきゃ
他のフレームワークでも変わらんよな って話。

当面はPC用に作って、将来的に箱で動かそうと思ってるかもしれない人は
最初からXNAでやってると、移植が楽になるかもしれない程度の話だな

今は誰もが手を出せるものではないのは確かだし。
0017名前は開発中のものです。2008/03/26(水) 11:30:37ID:K/hsrszi
>>16
移植を甘く見すぎ
高い移植性だけでも大きなメリット。

つかカジュアルゲーム向けと言っているのに
>パフォーマンス重視のゲーム
なんて言う事自体おかしい。
0018名前は開発中のものです。2008/03/26(水) 11:38:38ID:n6QpsSUN
フレームワークを用意すれば敷居が下がると言うのはフレームワーク厨の妄想
大規模開発ならともかく趣味の小〜中規模の開発では覚えることが増えて面倒なだけ
特定の文脈強制されずに思いついた端からアドリブで組める方がよっぽど敷居低いぜ
0019ひげねこ ◆oxtErU/kVM 2008/03/26(水) 12:47:05ID:gNjB85Qy
この二週間非常に忙しかったので、顔出せなくてサーセン
二時間程常駐します。

とりあえず、前スレに上がっていた話題として気になったもの

>XNAで作ったゲームを友達のPC上で遊ばせるのが面倒。
これは多い要望です。現在、インストールの負担を軽減する方法を検討中です。

>サンプルの充実と解説
どのサンプルの解説?どんなサンプルが欲しいですか?

>コントローラの純正ドライバっていつになったらまともになるの?
詳しく
0020ひげねこ ◆oxtErU/kVM 2008/03/26(水) 12:49:50ID:gNjB85Qy
私からのお願いですが、もう少し具体的な話が聞けると助かります。
「XNA遅い」「C#クソ」「使いづらい」という不満があるのは申し訳ないのですが、
そういった問題のもう少し具体的な内容と、期待する結果を書いてもらえると非常に参考になり、要望としても出しやすいです。

例えば

「遅い」という問題があった場合、

問題:
「このモデルを表示させるとXbox 360上ではPCのX%しか出ない」
どうやって表示させたのか、どんなPC環境なのかの情報があると助かります

期待する結果:
「現状のY倍の速度は出て欲しい」

という感じに書いてもらえるとこちらとしては対応しやすいです。
0021名前は開発中のものです。2008/03/26(水) 13:21:59ID:xkEhbJgM
平日昼間2時間とはキツイですね。このスレにはもう来ないつもりだったのですが、

>20 そういう会話してないんですよwww。 空気読んでw。

その解決策に、このスレ(過去ログ)は
・C++/CLI
・C#3.0
・大きな構造体をアンマネージドポインタで操作する
・新言語?
等の話題を上げていたのですが、ひげねこ氏のアイデアは有りませんか?
 っていうか、むしろ、そういったのを諭すような方向性の話があるとまとまります。

ブログのテクスチャの記事面白かったです。
 アレは誰かの要望ですか?そうならかなり愉快なんですけど、どうですか?

>どのサンプルの解説?どんなサンプルが欲しいですか?
Creators Club Onlineのサンプルは
ttp://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_04.html
と矛盾するので、長い上、汎用性のレベルは低いと思っています。
 読み方についてアドバイスをお願いします。

ttp://blogs.msdn.com/shawnhar/archive/2008/03/14/understanding-gpu-performance.aspx
を読んで、XNAチームは「甘えるな!! むしろオマエラの頭のレベルを教えろ」ってスタンスだと感じました。
一日でも速く、そんなオレラがいる良いコミュニティが出来る事を期待してます。
0022名前は開発中のものです。2008/03/26(水) 13:26:36ID:Na6PWth9
>>10ですよ。まぁ私はXNAは説明読んだだけでまったく触ってないですが、多分ここら辺とか。

・XNAframeworkを廃止するなりDirectXに同伴するなりして、インストールの手間を省かせたい。
・Input周り、キーコンフィグぐらいXNA側で実装してあげてもいいんじゃないですか?

どうでしょう?
0023212008/03/26(水) 13:42:28ID:xkEhbJgM
自己フォロー
>その解決策
 ガベコレ対策の話題です。
 非入会の人間としては、ガベコレ対策の怖さは妄想だけなので、
話があらぬ方向に進むのかもしれませんが。

金出した後に、ゲーム内容で無くて、ガベコレ対策が自分が趣味に費やせるコストを超えるってw。
笑えません><

平日昼間って言っても、学生は春休みだよね?
0024ひげねこ ◆oxtErU/kVM 2008/03/26(水) 13:52:53ID:xOARATeS
>>21
>平日昼間2時間とはキツイですね。
こっちは仕事後の夜の10時なので、キツクはないですよ。

>・C++/CLI
>・C#3.0
>・大きな構造体をアンマネージドポインタで操作する

XNA CGPチーム内では問題解決型の決定をするので「Aという機能が欲しい」といわれた場合よりも、
「Bという問題があり、これを解決するためにAが欲しい」という要望の方が選ばれます。

ですから、上の三つの機能が欲しいという場合は、その新機能が解決するべき問題点がある方が通りやすいです。
ただ、C#3.0対応についてはそれほど悲観するほどではないと思います。

>ブログのテクスチャの記事面白かったです。 アレは誰かの要望ですか?
某ゲームでディテールマップ使っていないのを見て、DX7時代のテクニックて忘れ去られているのでは?と思ってたのと
丁度マルチテクスチャの使い方を聞いた人が居たので、そこらへんの情報も書いてみようかな?といった感じで書きました。
っていうか、XNAの便利な機能紹介よりも、ゲームを作る上での一般的なノウハウみたいなものの方がウケが良いみたいです。

つづく
0025212008/03/26(水) 14:33:16ID:xkEhbJgM
すいません、先に逝きます。
お礼を言ってから落ちたかったのですが、すいません。
つづきも必ず読みます。

ありがとうございます。
0026ひげねこ ◆oxtErU/kVM 2008/03/26(水) 15:08:25ID:xOARATeS
ガベコレ対策ですが、あえてトリック的な提案をします。

GCに関しては、技術的な情報ばかり先行してしまって、必要以上に警戒されすぎているという感があります。
GC発生絶対阻止と考えるよりも、逆にGC発生しても気にならないようにするという考えがあってもいいと思います。
例えば、GC発生時の遅延についてですがNyaRuRuさんの記事にあるように10万個のオブジェクトのチェックだけで
14ms掛かるとありますが、これが発生した場合でも、結論から言うとゲームのシミュレーション自体は問題なく動き続けます。

http://blogs.msdn.com/ito/archive/2007/03/08/2-update.aspx
この記事でいうところの、固定更新、処理落ち状態と同じで、GCが発生した次のフレームではUpdateは呼ばれるが
Drawはスキップされます。

次にGCの発生頻度はある程度プログラム側で制御できるということです。GC.Collectメソッドで好きな時にGC発生することができるので
後はメモリ確保による自動的に発生するGCの頻度を抑えることでかなりコントロールできます。

コントロールさえできれば、後はゲームデザイン的に気づかれない工夫をします。例えば強制スクロール形のシューティングだったら、
中ボス、ボス戦が開始する直前のイベントシーン開始時に敵キャラクタを見せるためのカメラのカットインとかが入るときに
その切り替わりを印象的にする為にカットインの瞬間に白で画面全体をフラッシュさせた後にフェードインさせるついでにGCをフラッシュした瞬間に
発生させたりといった隠蔽方法があります。

ゲームによっては画面の切り替え時のフェードイン・アウトの時なんかはGCするには最適な場所ですね。このフェードイン・アウトは
昔から時間の掛かる処理を隠すのに良く使われてた手法です。

通常、コードの最適化、アルゴリズムの最適化、そしてアーキテクチャの最適化の順に対費用効果が高まりますが、
ゲームの場合は、その更に上にゲームデザインの最適化というのがあるんですが、どうしてもプログラマ思考だとアーキテクチャの最適化までしか
考えず、煮詰まって企画の人と話したら数分で問題解決なんてことがあるんでゲームデザインの最適化はあなどれません。
0027ひげねこ ◆oxtErU/kVM 2008/03/26(水) 15:17:32ID:xOARATeS
>>22
>・XNAframeworkを廃止するなりDirectXに同伴するなりして、インストールの手間を省かせたい。
これは前述のとおり、インストールする手間を省く手段は現在進行中です。

>・Input周り、キーコンフィグぐらいXNA側で実装してあげてもいいんじゃないですか?
これについても幾つかの要望がきています。具体的にどんな感じのキーコンフィグAPIが欲しいのか要望があれば、ぜひ聞かせてください。
0028ひげねこ ◆oxtErU/kVM 2008/03/26(水) 15:42:35ID:xOARATeS
>Creators Club Onlineのサンプルは
>読み方についてアドバイスをお願いします。
このサンプル郡はどうやってXNAのAPI郡を使うかというサンプルとして読むべきだと思います。
ご指摘の通り、汎用性は低いのでそのままゲーム内で使うのには適しているとはいえません。

もしかして、実際のゲーム製作に使えるサンプルというよりもソースコード、ヘルプ付の
コンポーネントが欲しいのでしょうか?

長いというのはどういった観点でしょうか?単にプログラムの行数でしょうか?それともプログラム自体でしょうか?
行数が多いのはかなりの部分にコメントが書き加えられているのでどうしても長くなってしまいます。

>ttp://blogs.msdn.com/shawnhar/archive/2008/03/14/understanding-gpu-performance.aspx
>を読んで、XNAチームは「甘えるな!! むしろオマエラの頭のレベルを教えろ」ってスタンスだと感じました。
教えろ?考えろ?どっちか判りませんが、この記事は単純にGPUをプロファイルするときは
パフォーマンス特性はCPUと違って非線形だということと、VSync外しましょうということが言いたいのだと思いますけど……。
プロファイルは最適化の時に役立つだけでなく、自分のプログラムが実際にどのように動いているのかを知るのにも便利なツールなのですが、
プロファイルの使い方、読み方自体を説明しているものは確かに少ないですね。
0029ひげねこ ◆oxtErU/kVM 2008/03/26(水) 15:43:25ID:xOARATeS
今日は落ちます。できれば週末にまた出没します。
0030名前は開発中のものです。2008/03/26(水) 20:02:58ID:4ir9T9Kh
他の参考ブログも載せろとかならともかく。
公式情報であるマインスイーパー外せって意味不明だろ。
0031名前は開発中のものです。2008/03/26(水) 21:58:40ID:xkEhbJgM
戻りました。ID:xkEhbJgM
変な質問なのだかよく解らない物にしっかり答えて貰って申し訳ないです。
ありがとうございました。

 あとから思ったのですけど、NyaRuRu氏とその最適解っぽいABA氏のソースに
私がコンプレックスを持ってるってのを伝えるべきだったのかなと思いました。
似たようなソースを書いてしまうか、C#ではそれに似たものしかもう書けないのでは無いかと。

>28 長いというのはどういった観点でしょうか?
 クラス継承やジェネリックなList<>等を多用して居るのが、無駄に感じてるので、長いと思います。

 C#にあまり詳しくない私が見ていると、コレが何かで効率の良い物に化けるのかな?とか
余計な事を考える所為かもしれないので「API郡を使うかというサンプルとして読むべき」と
確認ができてちょっと気楽になったと思います。 
(※「〜〜の〜〜周りのデザインパターンは使える!」とか言われたら死んでたかもしれません。)

 けど、Ms-pLででもC#2.0の最適ソースが有れば、上のコンプレックスが和らぐんで、
ソースコード、ヘルプ付のコンポーネントにそういうのが盛り込まれるなら有りですね。
C#3.0ではない良いソースを読む機会が沢山ほしいです。

>ttp://blogs.msdn.com/shawnhar/archive/2008/03/14/understanding-gpu-performance.aspx
>パフォーマンス特性はCPUと違って非線形だということと、VSync外しましょうということが言いたいのだと思いますけど……。
それを短絡的に、「ソースを見て実行できる環境にない他人には、貴方を助ける事は出来ない。それがたとえShawn氏でも。」
と読みましたw。
 自分で怪しいコードを消して、Stopwatchで挟んで、推理(profile)するしか無いのだなと。

英語読めない分を妄想で補ってしまったようです。日本語まで微妙で、お手数おかけしました。
0032名前は開発中のものです。2008/03/26(水) 23:08:18ID:TCtOpY+/
XNA含めC#のコードはCodePlexにいくらでもある
0033名前は開発中のものです。2008/03/27(木) 11:41:28ID:8ZYGwFLM
>10 入力周りは > 結局MDX使うの?
>22 ・Input周り、キーコンフィグぐらいXNA側で実装してあげてもいいんじゃないですか?
>27 どんな感じのキーコンフィグAPIが欲しいのか要望があれば、ぜひ聞かせてください。
これ以上詳しくってムリっぽくない? 図解かスケルトンコードしか思いつかん。
サシでメールで送るの?(俺に限ってはムリ)

ダメもとで書き足すとしたら、
目的】普通のDirectX対応ゲームパッドもしくはキーボード入力を偽X360パッドとして使える様にする。
    Xbox360向け開発者がPC上デバッグの為のダミーソースを書かなくて良くなる。
    (ダミーソースの出来で、開発者同士で話すときのニュアンスが変わる事を避けられる。)
    Windows向け開発者とWindows上で遊ぶユーザーを幸せにする。

実行方法】※俺の案
#if !XBOX360
  GamePad.Loadmapfile(@"c:\path\mapfile.xml") //イニシャライズ

  GamePad.GetState(PlayerIndex.One);//GetState所得の記述以降の記述で変わらない事。

マップファイルの仕様は、俺よりまともな奴に期待。xsdの書き方がわかりません><
--以下脳内仕様。
<Player index="1" Gamepad_Id="0"> <!-- PlayerIndex.OneとDINPUTの0番目のデバイスの対応付け -->
  <ThumbSticks>
    <Left level="analog">
      <up> <!-- 以下の条件 でvalueを変更-->
        <keyboard value="0">w</keyboard> <keyboard value="32747">8</keyboard><!--8はちょん押し-->
        <pov min="31472" max="4496" value="0" />
        <joystick axis="y"/>
        <joystick Gamepad_Id="1" axis="Rz"/>
        <bottun id="0">15</button>
マップファイルの作成はWindows専用の別アプリで、サンプルで提供して貰って、
他の設定画面の手本になる事を期待。
0034名前は開発中のものです。2008/03/27(木) 12:54:07ID:MUzwR7iH
>>33
MDXならある程度キーコンフィグ周りは一意に管理できるんだぜ。

キーコンクラスは、はじめのコンストラクタで以下のようにキーコン内容を読み込む。
bool useKey、bool usePad、Key[] keyDirections、Key[] keyActs、int[] padActs、int padID
キーコンクラス使用者側は、設定状況に関わらずAct(int)とDown、Left、Right、Upで値を確認できるようにしておく。
つまり、Act(0)はジャンプ/決定、Act(1)はダッシュ/キャンセル、Act(2)はアイテム使用・・・と勝手に決めて組めばok。


useKey周りに関して
・STGなど1人でやることが容易に想定できる場合はuseKeyとusePadは常に両方tureになるように組めばいい。
・対戦ゲームなど、パッドとキーボードで対戦してるのを見かける(正直驚くしかない)ものはuseを上手くフラグにして組むようにする。
・useKeyとは独立してEsc、Alt+Enter等は、別方面から対応/非対応を設定できるようにしておく。
0035名前は開発中のものです。2008/03/27(木) 13:20:39ID:8ZYGwFLM
thx
便利だ。 だけど、前スレ498で何故渋ったか解った気もする。

>・対戦ゲームなど、パッドとキーボードで対戦してるのを見かける(正直驚くしかない)ものはuseを上手くフラグにして組むようにする。
うちではデフェクトスタンダードなんだぜ。

・・・ってことは、俺の案はすでに破綻してるんだなw。 指摘が柔らかくて助かった。


俺案はあくまでアンケートの1回答に過ぎないし、こうじゃなきゃイヤって事もない。
MDXへの勧誘は個人的にはアリだけど、週末のひげねこ氏にも期待したい。
0036名前は開発中のものです。2008/03/27(木) 13:45:37ID:MUzwR7iH
いや>>19のこれを聞いたら期待が高くなってね。
>>XNAで作ったゲームを友達のPC上で遊ばせるのが面倒。
>これは多い要望です。現在、インストールの負担を軽減する方法を検討中です。
仮に自分の望む形になったとしたら、適当に動作比較して問題なければさっさと乗り換える。

キーコンに関しては、これ位普通にXNA側で用意できるだろ、ってのが本音。
0037名前は開発中のものです。2008/03/27(木) 15:11:20ID:YkvCYyat
FormのPictureBoxにスプライトフォントを表示したいんだけど・・・
this.font = this.Content.Load<SpriteFont>("Font");
Game じゃないから、Contentがない。

どうすればいい?
0038名前は開発中のものです。2008/03/27(木) 15:39:06ID:DzBhXsUP
>>37
それってXNAの話題じゃなくね?
0039名前は開発中のものです。2008/03/27(木) 16:12:28ID:YkvCYyat
>>38
PictureBoxの中だけXNAで処理したい。
スプライトとかポリゴンとかは表示できたが、フォントが出ん。
new ContentManager(ServiceProvider)したいが、ServiceProviderが不明・・・
0040名前は開発中のものです。2008/03/27(木) 19:10:06ID:hnBR7o5a
つttp://creators.xna.com/Headlines/developmentaspx/archive/2007/01/01/WinForms-Series-2_3A00_--Content-Loading.aspx
そのもののサンプルがあった。

ServiceContainer services = new ServiceContainer();//
・・・中略・・・
 content = new ContentManager(services); //イニシャライズ内
ぐらいで良いんじゃない?
0041名前は開発中のものです。2008/03/27(木) 20:12:13ID:rodDZo06
>>40 サンクス

発見した。こっちでできそうだ。
http://creators.xna.com/Headlines/developmentaspx/archive/2007/01/01/WinForms-Series-1_3A00_--Graphics-Device.aspx



0042名前は開発中のものです。2008/03/28(金) 03:00:57ID:1/94OpAf
>>26
通常60fpsで動くゲームでUpdate処理が間に合わなかった時は、ちょうど30fpsになるの?
■ このスレッドは過去ログ倉庫に格納されています