【みんな】XNA 質問・相談スレッド1【初心者】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/09/23(日) 23:43:41XNA はマネージ実行環境を完備する。
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/
ということで立ててみた。
0698デフォルトの名無しさん
2009/11/10(火) 13:16:15XNAとSlimDXのランタイムサイズはほとんど同じだよ。
XNA3.0からはDirectXランタイムも含まれるようになったのでそれも同じ。
0699デフォルトの名無しさん
2009/11/10(火) 15:03:48この一連の流れをいちいちエンドユーザーに説明するんですか?
動かなきゃ意味ないよ。
0700デフォルトの名無しさん
2009/11/10(火) 15:11:460701デフォルトの名無しさん
2009/11/11(水) 17:11:580702デフォルトの名無しさん
2009/11/11(水) 21:51:230703デフォルトの名無しさん
2009/11/12(木) 08:54:240704デフォルトの名無しさん
2009/11/12(木) 10:21:45まあインストーラが何とかしてくれりゃいいな
0705デフォルトの名無しさん
2009/11/13(金) 19:11:560706デフォルトの名無しさん
2009/11/14(土) 13:24:110707デフォルトの名無しさん
2009/11/28(土) 13:57:05Console.WriteLine()の値を取得することって出来ないのでしょうか?
WindowsではVisualStudioのデバッグ出力ウィンドウに表示されるのですが……。
0708デフォルトの名無しさん
2009/11/28(土) 14:02:230709デフォルトの名無しさん
2009/11/28(土) 14:15:080710デフォルトの名無しさん
2009/11/28(土) 14:23:31公式フォーラムで検索したら手がかりが出てきた。
ConsoleクラスじゃなくてTraceクラスを使うのか。
実機でもトレースログが出てきたのを確認できた。
0711デフォルトの名無しさん
2009/11/28(土) 21:41:020712デフォルトの名無しさん
2010/02/11(木) 05:20:33パスの設定でも間違えてるんじゃない?
0713デフォルトの名無しさん
2010/02/18(木) 15:07:22テクニックの変更が何故か出来ない
何が間違ってるんだろう・・・
こんな感じでやってるんだけど・・・
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);
effect.CurrentTechnique = effect.Techniques["hoge"];
effect.Begin();
effect.CurrentTechnique.Passes[0].Begin();
spriteBatch.Draw(hogeTexture, hogePosition, Color.White);
effect.CurrentTechnique.Passes[0].End();
effect.End();
effect.CurrentTechnique = effect.Techniques["foo"];
effect.Begin();
effect.CurrentTechnique.Passes[0].Begin();
spriteBatch.Draw(fooTexture, fooPosition, Color.White);
effect.CurrentTechnique.Passes[0].End();
effect.End();
spriteBatch.End();
0714デフォルトの名無しさん
2010/02/22(月) 12:41:240715デフォルトの名無しさん
2010/02/23(火) 05:43:06effect.Begin() と effect.End() の途中で変更するときに CommitChanges は使うようなので(違うのかな?)
真ん中の End() と Begin()を消して、CommitChanges を使ってみましたが、やはり出来ませんでした。
何か設定しないといけない部分でもあるのでしょうか?
0716デフォルトの名無しさん
2010/02/23(火) 07:47:43俺もなぜそうなるのか理由を知りたい&情報は共有できたほうがいいから、
公式のフォーラムで聞いてくれ。
ひげねこが理由付きで教えてくれるはずだ。
こんなところで聞くより早いぞ。
0717デフォルトの名無しさん
2010/02/23(火) 10:09:510718デフォルトの名無しさん
2010/02/23(火) 12:07:550719>>713>>715
2010/02/28(日) 19:14:07ついさっき質問してきました。
0720デフォルトの名無しさん
2010/03/03(水) 21:07:12”同種のスプライト”をspriteBatch.End()のとこで”一気描画”するもんだと想像してる。
だからテクニックとかパスとかでスプライトの性質を変えるたびに
spriteBatch.Begin-Endで囲ってやらなきゃいけないもんであると、
そういうもんなのだと、俺は無理やり思い込むことにしている。
にしても、ひげねこも回答くれなくなってしまったな。
ブログも全然更新してないし。
なんかもうサポート体制ダメすぎだな。
0721>>719
2010/03/04(木) 22:42:30エフェクトの変更時は spriteBatch.Begin() - End() で囲んであげた方がよさそうですね
ちょっと実験してみて、Effect の動作が少々分かったので書いておきます。(役に立てれば、と)
spriteBatch.Begin() - End() で囲った中で、
エフェクトの変更を行い描画を行うと、
1 回前に描画したテクスチャの描画方法も
変更後のエフェクトで描画されるようです。
ただし、連続して同じテクスチャを描画する場合は、
それらをひとまとまりのグループとしてみる必要があります。
( ただし、 SpriteSortMode.Immediate の時のみ。 )
( 他は全て BasicEffect によって描画されてる気がした。)
サンプルコードは書くととても長くなるので、
簡単な記述で例(実験結果)を示します。
その前に書いておきますが、CommitChanges() は
使ってもまったく効果がありませんでした。
また、以下の例では全て technique の変更についてのみ
書いてありますが、 pass の変更も同様の動作をします。
( pass の実験はちょっとしかやってないから、 )
( 自身はあまりありませんが... )
また、
spriteBatch.Begin(SpriteBlendMode.AlphaBlend,
SpriteSortMode.Immediate,
SaveStateMode.None);
と
spriteBatch.End()
で囲っていると、脳内補完してください
0722>>719 続き
2010/03/04(木) 22:43:31-----------------------------------------------
�@ technique1 で texture1 を描画しようとする
�A technique2 で texture2 を描画しようとする
�B technique3 で texture3 を描画しようとする
�C technique4 で texture4 を描画しようとする
-----------------------------------------------
�@は 1 つ後ろの�Aの影響を受け、
�Aの描画方法である technique2 で描画されます。
�Aも同様に�Bの technique3 で描画され、
�Bも同様に�Cの technique4 で描画され、
�Cは 1 つ後ろに何も描画命令が無いため、
普通に、自身の technique4 で描画されます。
-----------------------------------------------
�@ technique1 で texture1 を描画しようとする
�A technique2 で texture1 を描画しようとする
�B technique3 で texture1 を描画しようとする
�C technique4 で texture1 を描画しようとする
-----------------------------------------------
�@�A�B�Cは全て texture1 を描画しようとしている為、
これらを 1 つのグループとして扱います。
この場合は、1 番最後の描画方法である technique4 で
このグループは描画されます。
0723>>719 続きの続き
2010/03/04(木) 22:44:48�@ technique1 で texture1 を描画しようとする
�A technique2 で texture1 を描画しようとする
�B technique3 で texture1 を描画しようとする
�C technique4 で texture1 を描画しようとする
�D technique5 で texture2 を描画しようとする
-----------------------------------------------
�@�A�B�Cは全て texture1 を連続で描画しようとしている為、
これらを 1 つのグループとして扱います。
しかし、このグループは、次の描画命令�Dの影響を受け、
technique5 で描画されます。
�D は普通に technique5 で描画されます
0724>>719 続きの続きの続き
2010/03/04(木) 22:45:30�@ technique1 で texture1 を描画しようとする
�A technique2 で texture1 を描画しようとする
�B technique3 で texture2 を描画しようとする
�C technique4 で texture1 を描画しようとする
�D technique5 で texture1 を描画しようとする
�E technique6 で texture3 を描画しようとする
-----------------------------------------------
�@�Aは連続で texture1 を描画しようとする為、
形式上、これをグループA として扱います。
グループA は 1 つ後ろの描画方法である technique3 で
描画されます。
�Bは 1 つ後ろの描画方法である technique4 で描画されます。
�C�Dは連続で texture1 を描画しようとする為、
形式上、これをグループB として扱います。
グループB は 1 つ後ろの描画方法である technique6 で
描画されます。
�Eは普通に technique6 で描画されるようです。
( グループA とグループBは、間にtexture2(�B)の描画命令が )
( 入っているので、別物として扱います。 )
以上が実験結果です。動作原因なんかは当然分かりません。
0725>>719
2010/03/04(木) 22:46:24�@全ての描画命令を spriteBatch.Begin()-End()で囲ってやる
�A連続しないテクスチャ描画の場合は 1 つだけ描画方法
をずらして描画する
(最後の描画方法は、画面外にテクスチャを描画することで解決)
�B1 つテクスチャを描画するごとに、同じ描画方法でもう一度
画面外に別のテクスチャを描画する。
0726>>719
2010/03/04(木) 22:58:19あります。
( グラボは描画自体は速いが、描画の準備にかかる時間がとても長い )
( らしいので )
�Aは全ての状況には対応出来ない上、苦労に伴わない。
(if文などで描画命令を制御する時なんかはとてもしんどいと思う。)
�Bの方法は、画面外へ描画したテクスチャが、1 つ後ろの描画方法の
影響を受けても、見えないので問題はない。しかし、画面外に描画す
るテクスチャは、そのゲーム中では使わないものを使う必要があります。
( 連続で同じテクスチャの描画を行う時は、3 番目の例から分かるように )
( グループ化されてしまう為、グループごと描画方法が変わってしまう )
ただし、描画枚数が 2 倍になるため、速度がどうなるかはわかりません。
他に方法があれば、教えてください。
と、いうよりここまで書いておいて、もし根本的に違うなら
教えてください orz
0727デフォルトの名無しさん
2010/03/06(土) 07:03:380728デフォルトの名無しさん
2010/03/06(土) 11:25:56BeginとEndの中に入れる必要すらないことに気づいた。
とりあえず、異なるスプライトにそれぞれエフェクトのパスを適用するには、
↓みたいにやればできた。
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);
effect.Begin();
spriteBatch.Draw(texture1, position1, Color.White);
effect.CurrentTechnique.Passes["Pass1"].Begin();
effect.CurrentTechnique.Passes["Pass1"].End();
spriteBatch.Draw(texture2, position2, Color.White);
effect.CurrentTechnique.Passes["Pass2"].Begin();
effect.CurrentTechnique.Passes["Pass2"].End();
spriteBatch.Draw(texture3, position3, Color.White);
effect.CurrentTechnique.Passes["Pass3"].Begin();
effect.CurrentTechnique.Passes["Pass3"].End();
effect.End();
spriteBatch.End();
0729デフォルトの名無しさん
2010/03/17(水) 13:09:18/(^0^)\なんてこった
0730デフォルトの名無しさん
2010/03/18(木) 00:58:550731デフォルトの名無しさん
2010/03/22(月) 22:26:03バグを早くなおしてほしいな。
0732デフォルトの名無しさん
2010/03/22(月) 22:46:320733デフォルトの名無しさん
2010/03/22(月) 22:59:22質問があれば公式でするし。
0734デフォルトの名無しさん
2010/03/22(月) 23:02:500735デフォルトの名無しさん
2010/03/22(月) 23:03:330736デフォルトの名無しさん
2010/03/26(金) 02:55:03そうだとするとうっかり普段のHNとかを入力すると変更不能で後で酷い事に・・・
0737デフォルトの名無しさん
2010/03/28(日) 16:09:160738デフォルトの名無しさん
2010/03/28(日) 16:55:260739デフォルトの名無しさん
2010/03/28(日) 18:20:350740デフォルトの名無しさん
2010/03/28(日) 21:22:04再生途中でフリーズするんだけど。
フリーズ場所はランダム。
やっぱりエンコードの設定が悪いのかなぁー
0741デフォルトの名無しさん
2010/03/29(月) 11:29:59今はアイマスより恥ずかしいのがたくさんあるから安心しようw
0742デフォルトの名無しさん
2010/03/29(月) 11:30:43メモリ足りなくなってない?
0743デフォルトの名無しさん
2010/04/10(土) 17:30:58チュートリアルに従っても
キーが見つかりません、って
0744デフォルトの名無しさん
2010/04/10(土) 22:24:33今度は予期しないエラーで落ちた
どうしてかなぁ
0745デフォルトの名無しさん
2010/04/11(日) 15:42:450746デフォルトの名無しさん
2010/04/13(火) 01:54:450747デフォルトの名無しさん
2010/04/14(水) 21:05:56フルスクリーン時に右端が切れることがあるみたいなのですが、
映画みたいな上下に黒い枠をつけてサイズをあわせることってできませんか?
0748デフォルトの名無しさん
2010/04/14(水) 21:40:210749デフォルトの名無しさん
2010/04/15(木) 15:37:50できないこともないが、縮小入っちゃうよ
0750デフォルトの名無しさん
2010/04/26(月) 21:11:560751デフォルトの名無しさん
2010/04/26(月) 23:44:350752デフォルトの名無しさん
2010/04/27(火) 00:19:24なんと!!
くわしく頼む。
0753750
2010/05/02(日) 04:30:42もともと、ひげねこのブログにXNA4.0について以下のように書いてあったんだ。
>以前はSpriteSortMode.Immediateを指定してもテクスチャが同じ場合はSpriteBatch.End
>メソッドが呼ばれたときにまとめて描画するようになっていましたが、4.0ではSpriteB
>atch.Being/End間でEffectのパラメーターを変更しながら描画するというシナリオに対
>応する為にSpriteSortMode.Immediateを指定した場合はDrawを呼ぶごとに実際に描画
>するようになりました。
んで、確認してみた。
0754750
2010/05/02(日) 04:36:23�@Effectが一個ずれて適用される。
→EffectのBegin()-End()がなくなり、Apply()を使用するようになりずれなくなってた。
→CommitChangesも不要。
�A同じテクスチャを連続して描画すると、最後のEffectが全部に適用されてしまう
→個別にちゃんと適用されるようになってた。
って感じだった。
XNA Game Studio 4.0 CTPで確認。
いじょー、ねよっと
0755デフォルトの名無しさん
2010/05/02(日) 09:25:350756>>719
2010/05/02(日) 14:51:03これでめんどくさいメソッド作ったりダミー作らなくてもすむわけだな。
確認ありがとう
0757デフォルトの名無しさん
2010/05/03(月) 01:26:54ノベルゲーム作ってて、
文字列を都度読み込みDrawString()で描画してます
で、画面右端にいったら、自動で改行するようにしたいんだけど、どうやればいいかわかりませんでしょうか
プロポーショナルフォント使うつもりなので、文字幅が一定じゃないです…
スプライトフォントの文字幅を取得する事ってできないですかね
0758デフォルトの名無しさん
2010/05/03(月) 09:44:13で、一文字ずつ計測して表示限界まで達したら折り返し処理を自前で実装。
まあ大体自動で折り返しとかやってないよ。
X文字までとか言う制限をチェックするツールを作って、
それにとおして検出された行を手直し。
自動で折り返しとかするとゲームのメッセージウィンドウで
読みにくかったりするからね。
0759デフォルトの名無しさん
2010/05/03(月) 09:45:03f.MeasureString(s)
0760デフォルトの名無しさん
2010/05/04(火) 00:20:57できましたー、ありがとうございます
>まあ大体自動で折り返しとかやってないよ。
ふむー、そうなんですか・・・
とりあえず、自分の思うようにつくってみて、
不自然なら、やり方を変えてみます
助かりましたー
0761デフォルトの名無しさん
2010/05/07(金) 22:43:38モデルのテクスチャー自身の中身を書き換えたいので、
GraphicsDevice.SetRenderTarget関数を使って、矛先をテクスチャー素材に向けて、spriteBatch.Drawをやろうとしたんですが、
サーフェースの型が合わないと怒られてしまいます。
基本部分は3Dなので深度込みのサーフェースで、矛先がテクスチャーはRGB24ビットと違う型なので
エラーの言いたい事は分かるのですが、グラフィックデバイスとシェーダー(BasicEffect)の相関関係が理解できていないので、
対処法が分かりません。
グラフィックデバイスのインスタンスってやはり一個に限定されたりするんでしょうか。
ど〜かアドバイスをお願い致します。 orz
0762デフォルトの名無しさん
2010/05/07(金) 23:42:45orz
がむかつくので教えない。
0763761
2010/05/08(土) 06:26:11512*512なら通るのに1024*1024だとエラーになるのねw
0764デフォルトの名無しさん
2010/05/08(土) 06:51:28なんかこいつ生理的にムカつく。
0765デフォルトの名無しさん
2010/05/09(日) 08:54:21よくクズだと見抜いたな
0766デフォルトの名無しさん
2010/05/09(日) 09:30:170767デフォルトの名無しさん
2010/05/09(日) 10:06:560768デフォルトの名無しさん
2010/05/09(日) 11:19:01360でも動く?
0769デフォルトの名無しさん
2010/05/09(日) 12:12:40でもIronRubyがWP7に対応してるらしいから360でも動くんじゃないかな
0770デフォルトの名無しさん
2010/05/09(日) 13:22:500771デフォルトの名無しさん
2010/05/09(日) 13:34:17LuaInterfaceはまともだけどネイティブのLuaのラッパーだから360では使えない
IronLuaはどっちみち使えないけどIron〜系はLCG使ってるから
基本的にcompact frameworkでは動かない
WP7版のIronRubyはCFで動くようにLCG削ってインタプリタモードだけにしてある
0772デフォルトの名無しさん
2010/05/17(月) 23:39:020773デフォルトの名無しさん
2010/05/18(火) 02:26:142008EEのsp1が本体含んでるよ
まだ落とせる
0774デフォルトの名無しさん
2010/05/18(火) 04:11:28XNAなんかで遠回りするのはやめておけ
必ず後悔するぞw
0775デフォルトの名無しさん
2010/05/18(火) 08:43:54360でゲーム作るならXNA使うしかないじゃん
0776デフォルトの名無しさん
2010/05/18(火) 22:38:490777デフォルトの名無しさん
2010/05/21(金) 22:01:55C#使ってると、いまさらC++には戻りたくないんだが・・・
0778デフォルトの名無しさん
2010/05/21(金) 23:12:360779デフォルトの名無しさん
2010/05/22(土) 20:04:21.NET系の中では最も配布が簡単
0780デフォルトの名無しさん
2010/05/23(日) 14:54:350781デフォルトの名無しさん
2010/05/23(日) 15:04:100782デフォルトの名無しさん
2010/05/23(日) 15:07:240783デフォルトの名無しさん
2010/05/23(日) 15:47:24もしかしてCreateFromAxisAngleのことですか?
0784デフォルトの名無しさん
2010/05/23(日) 19:15:360785デフォルトの名無しさん
2010/05/24(月) 10:43:07これで回転させているのですが、回転させたときにモデルが横に引き伸ばされてしまいます。
どなたか原因が分かる方はいらっしゃいますでしょうか?
もしいるのであれば原因と解決法をお教えいただけないでしょうか?
お願いします。
0786デフォルトの名無しさん
2010/05/24(月) 13:27:030787デフォルトの名無しさん
2010/05/24(月) 13:50:33ありがとうごさいます。解決しました。
0788デフォルトの名無しさん
2010/05/24(月) 23:27:58どなたか教えてください、お願いします。
0789デフォルトの名無しさん
2010/05/24(月) 23:34:510790デフォルトの名無しさん
2010/05/24(月) 23:43:11if (現在のフレームでマウスボタンが押されている) {
if (!A) { A = true; B = 現在のマウス座標; }
else { var d = 現在のマウス座標 - B; dに応じてモデル回転; B = 現在のマウス座標; }
} else { A = false;
0791デフォルトの名無しさん
2010/05/25(火) 00:03:38ありがとうございました!
0792デフォルトの名無しさん
2010/05/26(水) 03:18:070793デフォルトの名無しさん
2010/05/26(水) 22:17:24上記のひにけにさんのサイトにある自動XNBファイルシリアライズを参考に
XMLファイルからデータを取り込もうとしています。
シンプルな例に言われるとおりにやってみたのですが、エラーを出してしまいます。
他プロジェクトでできたDLLを参照設定に追加してやってみましたが、ビルドは成功するものの
Neko[] cats = Content.Load<Neko[]>("cats");
の部分で読み込みエラーをしてしまいます。
エラー内容は
"cats" の読み込み中にエラーが発生しました。
ContentTypeReader Microsoft.Xna.Framework.Content.ArrayReader`1
[[MyDataTypes.Neko, MyDataTypes, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null]] が見つかりません。
どなたかエラー原因がわかる方がいませんでしょうか?
よろしくお願いします
0794デフォルトの名無しさん
2010/05/27(木) 02:00:480795デフォルトの名無しさん
2010/05/27(木) 10:53:29話がよくわからないけど、こっちで再現できるだけの材料ある?
0796デフォルトの名無しさん
2010/05/27(木) 10:55:180797デフォルトの名無しさん
2010/05/27(木) 19:06:18まだXNA初めて4ヶ月ぐらいなので、もしかしたら根本的な部分が間違っている
のかもしれません・・・。
下のコメントは読みましたが、すでに本文の方も修正されているみたいです
■ このスレッドは過去ログ倉庫に格納されています