トップページ⇒tech
1001コメント300KB

【みんな】XNA 質問・相談スレッド1【初心者】

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2007/09/23(日) 23:43:41
Microsoft XNA はマイクロソフトによって提供された、ゲーム開発のためのツールである。
XNA はマネージ実行環境を完備する。
2004 年 3 月 24 日、カリフォルニア州のサンノゼの Game Developers Conference で発表され、
2006 年 12 月 11 日にリリースされた。

XNA は「 XNA's Not Acronymed」 ( XNA は頭字語ではない)の頭字語である。


XNA デベロッパーセンター
http://www.microsoft.com/japan/msdn/xna/

xna スタジオ
http://xna-studio.jp/

XNA Game Studioメモ
http://www.saturn.dti.ne.jp/~npaka/xna/

ということで立ててみた。
0809デフォルトの名無しさん2010/06/01(火) 00:09:34
最初のY軸180度回転のせいで、例えばX軸は最初の状態と比べると真逆に向いてしまうから。
X軸回転の後Y軸回転したらどうなるか、とかいろいろやって何が起こるか試してみるといい。
この辺のマトリクスの仕組みを理解しないと思い通りに動かすのは難しいよ。
0810デフォルトの名無しさん2010/06/01(火) 00:54:04
>>808
回転の順序逆なんじゃね?
0811デフォルトの名無しさん2010/06/01(火) 11:35:06
>>810
(1、0、−1)の軸で回転させてから、
Y軸で回転させるということでしょうか?
0812デフォルトの名無しさん2010/06/01(火) 11:39:24
>>811
行列の右結合と左結合が逆。
自分の意図してる方と同じ回転順序になってない。
0813デフォルトの名無しさん2010/06/03(木) 22:53:20
以前、XMLの読み込みついて教えていただいたのですが、
XMLを二次元配列で読み込む方法はないでしょうか?
当然、XMLファイルも今のままではダメだと思うのですが、
<item>の中に<item>を作ればいいのでしょうか?
0814デフォルトの名無しさん2010/06/04(金) 16:14:01
XML に出力してみて、自分で改変すればいいよ。XmlSerializer の Deserialize メソッド使えば出力出来る。綴り違ったらごめん。
0815デフォルトの名無しさん2010/06/04(金) 16:14:58
間違えた。De は要らなかった。
0816デフォルトの名無しさん2010/06/06(日) 12:06:00
>>815
なるほど
やってみます!
0817デフォルトの名無しさん2010/06/06(日) 12:29:23
配列を含んだクラスをXmlSerializer使ってみたのですが、
型 'クラス名' を反映中にエラーが発生しました。
ってエラーになります。
配列の部分をコメントアウトすれば、エラーがなくなりXmlファイルが生成できます
配列を含むXmlを作る時には、何か方法が違うのでしょうか?
0818デフォルトの名無しさん2010/06/06(日) 12:42:01
3.1で追加された自動シリアライズが配列までサポートしてないのかも
そもそも多次元配列はシリアライズできないよね?まあジャグ配列にしたんだろうけど。
リーダーライター自分で書くのが確実な気が
0819デフォルトの名無しさん2010/06/06(日) 12:51:05
多次元配列は事実上の非推奨
何のメリットも無いから使わなくていいよ
0820デフォルトの名無しさん2010/06/06(日) 18:24:08
そうなの?
ゲームなんか作るときは
コードの分かりやすさとか管理のしやすさがメリットとしてあると思うけど。
二次元グリッドで番地的にオブジェクトだのポリゴンだのしまっておくときとか。
0821デフォルトの名無しさん2010/06/06(日) 18:26:05
Listでいいじゃない
0822デフォルトの名無しさん2010/06/06(日) 18:38:44
固定長の普通の配列を使うことにメリットがなくて
Listを使った方がいい、とか言いいたいならまだ分かるけど、
「多次元配列」自体にメリットがないという意味が理解できない。

(もっとも、速度は固定長の普通の配列の方が速いだろうし、
使い勝手としてはListとかの方がいいだろうし、そこの選択は適材適所だとして)
0823デフォルトの名無しさん2010/06/07(月) 21:33:30
>多次元配列は事実上の非推奨
>何のメリットも無いから使わなくていいよ

なんだよ、根拠もないのかよ。
0824デフォルトの名無しさん2010/06/08(火) 11:50:05
何言いたいのかよくわかんないけど
それでなくちゃいかんという場面が思いつかないね
0825デフォルトの名無しさん2010/06/15(火) 13:35:40
複数のモデルを表示すると、奥にあるものが手前に表示されてしまいます。
この現象を解消するにはどうしたらよいのでしょうか。
どなたかわかる方がいらっしゃったらお教え願いませんでしょうか?
お願いします。
0826デフォルトの名無しさん2010/06/15(火) 13:46:27
奥にあるものをあとから描いてるんじゃ?
どうやってんのよ
0827デフォルトの名無しさん2010/06/15(火) 14:22:26
>>825
例えばSpriteBatchと一緒に使っていて、レンダーステート変更されてしまっているんじゃないかな?
http://blogs.msdn.com/b/ito/archive/2007/03/13/spritebatch-part2.aspx
0828デフォルトの名無しさん2010/06/15(火) 14:38:03
>>827
そうです。
モデルだけを表示していた時は普通に表示できたのですが、
文字も一緒に表示するとおかしくなりました。
0829デフォルトの名無しさん2010/06/15(火) 14:43:39
Zバッファを有効にしたらできました。
0830デフォルトの名無しさん2010/06/15(火) 16:58:17
モデルの回転させるとき、
他の回転軸を固定したまま回転させることってできないのでしょうか?
(回転軸の固定とは、ベクトル方向が自分から見て常に同じ向きを向いているという意味です。)
0831デフォルトの名無しさん2010/06/15(火) 17:00:04
それは固定って言わないのでわ?
0832デフォルトの名無しさん2010/06/15(火) 17:19:12
>>830
ググってみた
http://www.arakin.dyndns.org/gl_torusquat.php
0833デフォルトの名無しさん2010/06/16(水) 16:03:53
Quaternionでxの部分だけ表示、変更するにはどのようにしたらよいのでしょうか?
0834デフォルトの名無しさん2010/06/16(水) 16:05:01
Quaternionでxの部分だけ表示、変更すればいいですよ
0835デフォルトの名無しさん2010/06/16(水) 16:31:36
ありがとうございました
0836デフォルトの名無しさん2010/06/16(水) 16:37:04
>>833
Matrixから作ったQuaternionのxの部分を表示するにはどのようにしたらよいのでしょうか?
0837デフォルトの名無しさん2010/06/16(水) 16:47:04
Xいじってまたつくればよかんべ
0838デフォルトの名無しさん2010/06/16(水) 17:15:06
>>836
System.Console.WriteLine(Quaternion.CreateFromRotationMatrix(Matrix.Identity).X);
0839デフォルトの名無しさん2010/06/16(水) 18:08:26
MSの犬の集まるスレはここか・・・・
0840デフォルトの名無しさん2010/06/16(水) 18:16:03
new Texture2D(GraphicsDevice, 1, 1)
で1x1の大きさのテクスチャつくったら、
どれくらいメモリくう?

手元の環境で試してみたら…。
Texture2D[] ts = new Texture2D[256];
の状態でメモリ測定。
次に、256回newして配列に収めてメモリ測定。

だいたい一個あたり311byte使ってるようなんだが…。
たった1x1のサイズでそんなに食うものなのか?

テクスチャやデバイスのプロパティは以下。

SurfaceFormat = Color
TextureUsage = None
RequiresPower2 = true
SupportsNonPower2Conditional = true
0841デフォルトの名無しさん2010/06/16(水) 19:10:14
>>839
ゴキちゃんかw、今年は残念だったなw
0842デフォルトの名無しさん2010/06/16(水) 20:04:28
>>841
お手!
0843デフォルトの名無しさん2010/06/16(水) 20:12:15
>>838
せっかく教えていただき申し訳ないのですが、
spriteBatchでの表示方法をお教えいただけるとありがたいです。
0844デフォルトの名無しさん2010/06/16(水) 22:17:30
>>840
メモリ測定てどうやるの?
0845デフォルトの名無しさん2010/06/17(木) 10:32:08
>>843
何がしたいの?
数値を画面上に表示したいってだけ?
0846デフォルトの名無しさん2010/06/17(木) 11:23:25
>>845
はい。
あと、できればxの値だけを変える方法も知りたいです。
0847デフォルトの名無しさん2010/06/17(木) 11:51:49
x変えるのは>>837でいいじゃない?
文字はstring.FormatとSpriteBatch.DrawString組み合わせればいい
SpriteFontの扱いはわかるべ?
0848デフォルトの名無しさん2010/06/17(木) 22:09:10
Matrix以外の方法で、
モデルの向きを最初から反対の状態で描画する方法が知りたいです。
知ってる方がいらっしゃったら教えていただけないでしょうか?
お願いします。
0849デフォルトの名無しさん2010/06/17(木) 22:09:50
日本語で詳しく。
0850デフォルトの名無しさん2010/06/17(木) 23:16:33
よくわからないけどモデルを反対の状態で作ればええねん。俺って天才かも
0851デフォルトの名無しさん2010/06/18(金) 00:39:28
カリングを変えたいってこと?
0852デフォルトの名無しさん2010/06/18(金) 00:40:53
パワーリング!
0853デフォルトの名無しさん2010/06/18(金) 19:42:31
頂点を指定して線を描く場合、線の太さは変えられないのでしょうか?
0854デフォルトの名無しさん2010/06/18(金) 19:48:23
三角形を二つ使うことになる。
0855デフォルトの名無しさん2010/06/19(土) 00:00:54
線に太さは存在しない
0856デフォルトの名無しさん2010/06/19(土) 00:03:30
だったら線だけでは何も描かれないのが自然
0857デフォルトの名無しさん2010/06/19(土) 00:17:25
実際線は目にみえない。
線で構成されたものがみえる。
0858デフォルトの名無しさん2010/06/19(土) 11:34:39
メタセコイアなどで太い線を作るしかないのでしょうか?
0859デフォルトの名無しさん2010/06/19(土) 12:29:08
>>858
モデルを用意しておいてもいいけど、プリミティブで描画できるよ
0860デフォルトの名無しさん2010/06/19(土) 18:21:42
windows限定になるけど、右上の×ボタン押したときに、
"終了しますか?"みたいなメッセージを表示させるには
どこに処理を書けばいいの?
0861デフォルトの名無しさん2010/06/19(土) 19:09:19
close
0862デフォルトの名無しさん2010/06/19(土) 23:09:30
>>860
普通にプログラムに書けばいいと思うよ
0863デフォルトの名無しさん2010/06/20(日) 12:32:26
クローズのイベントを拾いたいってこと?
XNAだとどうしたらいいんだろうね。
試しにメッセージフックしたらできたけど、クローズだけでここまでやりたくないなあw
0864デフォルトの名無しさん2010/06/20(日) 16:37:00
Winフォームのウィンドウ内にXNAの画面を表示させるサンプルが公式にあった気がする。
それみりゃ多分できるんじゃね。

XNAはWindowsを意識しなくていいようにできてるんだろうから
Windowsのイベント取得とかは普通には用意されてないだろうなぁ。
0865デフォルトの名無しさん2010/06/21(月) 08:59:35
Microsoft.Xna.Framework.GameのGameクラスも内部的にはSystem.Windows.Forms.Formを使っている。
GameメンバのWindow.Handleがフォームのハンドルなので、
例えばGameクラスの実装に

protected override void Initialize()
{
Form f;

f = Form.FromHandle(Window.Handle) as Form;

f.FormClosing += new System.Windows.Forms.FormClosingEventHandler(f_FormClosing);

base.Initialize();
}

void f_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
e.Cancel = true;
}

とすると×ボタンで閉じられないように出来る。
0866デフォルトの名無しさん2010/06/21(月) 09:02:19
ただ個人的にはFormを自分で実装した方が使いやすいと思うけどね。
この方法だとパブリックメンバ以外には触れないし。
0867デフォルトの名無しさん2010/07/02(金) 10:10:38
SWF2XNAで、Flash ゲームから XNA のゲームを作成
- http://bit.ly/drNHby

糞ゲー乱立の予感
0868デフォルトの名無しさん2010/07/02(金) 10:41:50
箱○版ゴミ箱がたくさんリリースされるに違いない
0869デフォルトの名無しさん2010/07/02(金) 17:54:50
だな
0870デフォルトの名無しさん2010/07/03(土) 10:03:43
竹島を入力できないX-BOXを買わされてしまった怨みは絶対に忘れない
0871デフォルトの名無しさん2010/07/06(火) 22:25:26
買ってないのバレバレ
ゲハが大変なことになってるのはわかるがここにはくんなよ
0872デフォルトの名無しさん2010/09/17(金) 20:01:10
頂点バッファを使用した線の描画で、
forを使用して繰り返し描画しようとすると、
頂点データを頂点バッファに書き込む所でエラーが出てしまいます。

誰か原因が分かる方がいらっしゃったらお教え願えませんでしょうか?
0873デフォルトの名無しさん2010/09/17(金) 20:55:51
よくわからんからその部分のソースを
0874デフォルトの名無しさん2010/09/17(金) 21:29:07
どんなコード書いてるのか知らないけど、線描くくらいで頂点バッファなんかいらないだろ
DrawPrimitives使っといて、もしも後で遅くて問題になったら(ありえないだろうけど)
そのとき考えればいいこと
0875デフォルトの名無しさん2010/09/17(金) 23:03:26
>>874
>>872が問題ににしてるのは書き込めないことであって、実装方法なんて聞いてない。
文意すら理解できないおまえのようなヴァカが、PG関係の板に出入りしてるとは驚きだ。
小学校ぐらいからやり直して屍ねよ。
0876デフォルトの名無しさん2010/09/17(金) 23:12:39
書き込む所でエラーが出てるからといって書き込めないとは書いてない
C言語の前に日本語勉強して来い屍クン
0877デフォルトの名無しさん2010/09/17(金) 23:16:58
お前らそんな事でケンカするなよ
0878デフォルトの名無しさん2010/09/19(日) 17:03:55
4.0出てたんだな
0879デフォルトの名無しさん2010/09/19(日) 21:31:18
現在横スクロールアクションを製作中なのですが
BoundingBoxをゲーム中に表示させることはできますでしょうか。
もしくはそれらを表示するのに適した方法がありましたらおねがいします。
0880デフォルトの名無しさん2010/09/19(日) 21:44:55
プリミティブでラインでもかけばいいでしょ。
デバッグ中なんだから速度が多少遅くてもいいし。
0881デフォルトの名無しさん2010/09/20(月) 10:28:20
箱○自体のメモリは
・512MB GDDR3 RAM
・700MHz DDR
・UMA(統合型メモリー アーキテクチャー)
だそうですが、
xnaから使えるメモリはどの程度ありますか?
公式の文書とかある?
0882デフォルトの名無しさん2010/09/20(月) 21:23:26
>>880
プリミティブというのをしらべてみたら
ポリゴンのほうの知識が必要そうですね。
今は敷居がたかそうですがいつか役立てたいです。
0883デフォルトの名無しさん2010/09/20(月) 21:28:41
>>882
スプライトで4頂点が自由に設定できるなら、
2つの頂点を他の2つの座標と同じにすれば直線が誕生する。
0884デフォルトの名無しさん2010/09/20(月) 23:28:33
質問
XNAってDX見たいにスプライトとかの透明度を常に変えることって出来ないのか?
Drawのカラー部分を new Color(255,255,255,i)見たいに変数入れて値を変化させてるのだが不透明のままなんだが如何したらいいんだろう
0885デフォルトの名無しさん2010/09/20(月) 23:50:48
マルチうぜえ
0886デフォルトの名無しさん2010/09/21(火) 00:27:48
>>884
変数「i」じゃなく、定数でやってみた?
まず定数でやって半透明に成功したかの報告からヨロ。
0887デフォルトの名無しさん2010/09/21(火) 01:20:55
>>884
RenderState.AlphaBlendEnableとか?
0888デフォルトの名無しさん2010/09/21(火) 10:29:08
>>887
それだろうけど、デフォルトがそうじゃなかったっけ。
試しに普通に書いたら普通に半透明になったんだけど
一体どうやって書いてできないって言ってるの?
バージョンとかも含めて書いてくれないか
0889デフォルトの名無しさん2010/09/21(火) 15:27:19
コンパイル通ってるみたいだから関係ないけどXNA4ではアルファ値を引数にとるコンストラクタは削除されるらしいね
0890デフォルトの名無しさん2010/09/21(火) 16:16:41
遅れてすまない
定数でやってみたら普通に半透明に出来る
一応 >>887見たいに
RenderState.AlphaBlendEnable = true; にはしてあるがやはり変数では出来ないっぽい
0891デフォルトの名無しさん2010/09/21(火) 16:20:04
>>890
0to1か0to255か、そこが問題だ!
0892デフォルトの名無しさん2010/09/21(火) 16:26:32
だったらXNA以前の問題
直前にConsole.WriteLine(i);とか入れて観察してみな
表示された値が予想と違ってて、それでも何が間違ってるかわからないのであれば
XNA全く関係ないから初心者用のC#スレへ行け
0893デフォルトの名無しさん2010/09/21(火) 16:33:39
言ったとおりに良く見たらAlphaの部分が0〜0.1floatとか0〜255byteで、intで指定してたっぽかったから駄目みたいだった
そのとおりに書き直してみたら段々と消えて行くような感じに出来た。
教えてくれた人達有難う。駄スレ済みませんでした
0894デフォルトの名無しさん2010/09/21(火) 16:44:06
>>893
マジカヨwおれ超エスパーwww
0895デフォルトの名無しさん2010/09/21(火) 18:28:15
なにが楽しくてXNAなのか
0896デフォルトの名無しさん2010/09/21(火) 18:33:03
楽しいから使ってるんじゃねえよ、これしかねえからこれなんだよ。
0897デフォルトの名無しさん2010/09/21(火) 18:33:42
かわいそうに・・・
0898デフォルトの名無しさん2010/09/21(火) 20:58:22
>>895
コンシューマで発表できるってのはちょっとした浪漫なんよ
0899デフォルトの名無しさん2010/09/21(火) 21:10:42
C#とXNAやってからC++とDirectXでやったら発狂した
0900デフォルトの名無しさん2010/09/21(火) 21:14:29
>>899
おまえの頭が対応できなかっただけだろ?
0901デフォルトの名無しさん2010/09/21(火) 21:20:54
>>900
そう言ってるんだけど
何で突っかかってくるのか
0902デフォルトの名無しさん2010/09/21(火) 23:04:20
無駄に喧嘩腰な奴多すぎw
0903デフォルトの名無しさん2010/09/21(火) 23:05:51
喧嘩しか盛り上げる術がないんだもん
0904デフォルトの名無しさん2010/09/21(火) 23:15:35
もう俺Java3Dで作るわ
0905デフォルトの名無しさん2010/09/22(水) 03:30:23
その後>>904の姿を見たものはいなかった・・・
0906デフォルトの名無しさん2010/09/22(水) 12:41:56
でも実際XNAとアンマネージDirectXなら大して変わらんよね
ファイルの読み書きだとかクラスの扱いだとかそういう周辺の部分では全く違うけど
XNAとDirectXのAPIってそんなに違わないぞ
0907デフォルトの名無しさん2010/09/22(水) 22:47:33
CoCreateInstance のうざさが低減するのと、メモリ管理多少手を抜けるくらい?

とはいえ、ComPtr みたいなのあるし、
C# でも GC 走りまくるコード書くとゲームはすぐに性能劣化するのよねぇ。
0908デフォルトの名無しさん2010/09/22(水) 23:27:04
現在、横STGで敵をかきながらステージ1にあたる部分を作っているような
状態です。

XNAは、LoadContents()メソッドとInitialize()メソッドは最初に
読み込んだあとはもう使われる事はないんでしょうか?

そして、最初にLoadContents()メソッドで全部を読み込むにしては
ゲーム途中にもロード時間がはいるゲームがありますが
あれはどんな処理をしているんでしょうか?
レス数が900を超えています。1000を超えると表示できなくなるよ。