ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ゲーム用統合開発環境 XNAコミュの質問トピ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
トピック立てるまでもない質問はコチラ。

コメント(103)

>J-en さん
Effect.Clone そういうのもあるのか!w
なるほど!情報ありがとうございます!
何かの時に使ってみます!
初めまして、ウィルフレムといいます。
自己紹介用のトピックが無かったので、こちらに書かせていただきました。

最近、このような物を作り始めた者です。


よろしくお願いします。
>ウィルフレムさん
面白いですね。指でOK

この手のソフトは出来上がった動画を公開することが肝だと思いますが、
動画そのものはやり取りできそうにないですね。ということは、
通信ライブラリを使うなりしてモーションデータを交換するのでしょうか?

あと、ニコニコ動画よりYoutubeの方がよかったかも知れません。
ヘイトコメントが気になって肝心の画を見る余裕が…。うれしい顔
と言うか、開発中のソフトの動画または静止画を公開するトピックが
あった方がいいような気がするのですが、どうでしょうか。
返事ありがとうございます。

この動画では「わかりやすさ」と「キャッチーさ」を優先して「ミクをXBoxで」ということを前に出しました。
しかし、このソフト、というよりもライブラリは
ダンスモーションを使ってPVを作成するものではなく(できなくは無いですが、それならばこれの元である本家MikuMikuDanceを使った方が良い)
このライブラリは、MikuMikuDanceを「モーション作成ソフト」として使うことができる、主にゲームを作成する人向けのライブラリです。

想定する流れ
「MMD用のモデルとモーション用意」(本家MikuMikuDance等を使用)
↓
「ライブラリ中のImporterでモデルとモーション読み込み」
↓
「ゲーム中でモーション利用」(剣振り、踊りモーション等)
↓
「MMDを使った音ゲーやアクションゲーム等ができる」
↓
「(オリジナルモデルならば)WindowsまたはXBox360で公開」(ボカロキャラは問い合わせ中)

ライブラリの宣伝も兼ねて、書き込みさせてもらいました。

あと、確かにYouTubeの方を貼りつけておいた方が良かったですね。
すみません。
ヘイトコメントがついたことは完全に想定外です。どうも投稿日同日にPS3版のミクのゲームの発表があったらしく、ちょうどいいタイミングでこの動画が出てきたので、ゲハ板で話題になったのが理由らしいです。
もし、気になるようでしたらコメントを消してもらった方がいいと思います。
こちらこそお返事ありがとうございます。
なるほど、ゲーム作成者向けのライブラリというのが主眼なんですね。
で、そのインポート元ファイルがMMD形式になっていると。

XNAの開発者は特に日本国内ではまだまだ少ないようなので、
他の方の作られた動画を見ると心強いです。
自分もちょうど昨日辺り開発途中動画を作成したのですが、
動画トピック立てても需要があるか、心配と言えば心配なので。


>同日にPS3版のミクのゲームの発表
げっそり
>ウィルフレムさん

XNA Animation Component Library + RokDeBone2
や
XNAnimation Library + 〃
より利便性が高いXNA用スキンアニメができるものができあがるようでしたら個人的にとてもうれしいです。

ぇ、協力募集?

・・・あ、遠くで鳥の鳴き声が。。。。。。。。゛(ノ‥)ノ トコトコ
ありがとうございます。
XNA、もう少し盛り上がって欲しい気もしますので、立ててみましょうか。
皆さんこんにちはm(_ _)m
自分は今XNA GameStudio3.1でボンバーマン風の青鬼を開発しています。
ですが、私自身プログラムの経験が浅く分からない事ばかりです;
少しでも実力をつけて楽しくゲーム作りをしたいので、どうかご助力下さい><

それでは本題に入ります。
質問したいのは2Dの当たり判定についてです。
これはネットで色んなサイトを巡り調べ尽くしたのですが解決には至らずorz

自分はBoundingSphereを使い判定しようと思っています。
ただ、見苦しい上に何と説明したらよいのか分からないので今回はソースは載せないでおきます。
こんな質問に目をつけて頂けたら幸いです。
それでは(´ω`)ノシ
>> J-enさん

細かくご説明して頂き、本当に感謝します!
そうなんですよね、BoundingSphereは学生の時に3Dのフライトシュミレーターゲームを作る際に使いましたのであまり2Dでは使わないんじゃないかと思っていました。

何となくではなく、しっかりと理屈を理解して作っていきたいのでJ-enさんの一例を参考に修正したいと思います( ´ω`)
度々すいませんm(_ _)m

実は画像をTexture2DではなくSpriteで読み込んでいたのですが、これはどちらでも良いのでしょうか?
Spriteだと座標が取得できないので変更しようかと思いますが・・・

それから、読み込んでいる画像もアニメーションさせる為に上下左右それぞれ4方向分の画像を用意し、switch文で切り替えながら描画してます。
これは無駄な組み方なのでしょうか?('A`)

自分のは少し面倒なやり方をしていますので、ソースを載せますorz

↓↓

///////////////////////////////////////////////////////////////////////////////

Sprite R_pettern = null;
Sprite L_pettern = null;
Sprite Down_pettern = null;
Sprite Up_pettern = null;
以上が4方向に対応する変数です。
どれも300×150のpng形式の画像です。

そして、アニメーションを制御するクラスを作ってます。
#region // 青鬼(右向き)表示情報の宣言
public class rightInfo
{
public int Pattern = 0; // 切り抜き画像の左位置(アニメーション位置)
public int Width = 100; // 切り抜き画像の幅
public int Height = 150; // 切り抜き画像の高さ
public int animTimer = 0; // アニメーション時間
public int animCount = 3; // アニメーションのパターン数
}
rightInfo right_pettern = new rightInfo();
#endregion

Update関数で、キー入力際に以下の処理を行う事で動かしています。
right_pettern.animTimer++; // 時間加算
if (right_pettern.animTimer >= 8) // 8フレーム経過した?
{
right_pettern.animTimer = 0; // 時間をリセット
right_pettern.Pattern += right_pettern.Width; // アニメーションパターンを右に

if (right_pettern.Pattern >= right_pettern.Width * right_pettern.animCount) // パターン数を超えた?
{
right_pettern.Pattern = 0; // パターンを一番左に戻す
}
}

※続きます
忘れてましたが、変数でdir(キャラの方向)というものを作ってます。
Draw関数にて、、、

//////////////////////////////////////////////////////////////////////////////

switch (dir)
{
case 0:
Down_pettern.SetSrcRect(down_pettern.Pattern, 0, down_pettern.Width, down_pettern.Height);
Down_pettern.SetDestRect(move_X, move_Y, down_pettern.Width, down_pettern.Height);
Down_pettern.Draw();
break;

case 1:
Up_pettern.SetSrcRect(up_pettern.Pattern, 0, up_pettern.Width, up_pettern.Height);
Up_pettern.SetDestRect(move_X, move_Y, up_pettern.Width, up_pettern.Height);
Up_pettern.Draw();
break;

case 2:
R_pettern.SetSrcRect(right_pettern.Pattern, 0, right_pettern.Width, right_pettern.Height);
R_pettern.SetDestRect(move_X, move_Y, right_pettern.Width, right_pettern.Height);
R_pettern.Draw();
break;

case 3:
L_pettern.SetSrcRect(left_pettern.Pattern, 0, left_pettern.Width, left_pettern.Height);
L_pettern.SetDestRect(move_X, move_Y, left_pettern.Width, left_pettern.Height);
L_pettern.Draw();
break;
}

非常に汚いソースなのですが、Updateでキー入力された際に何番目が選ばれているのかを調べ描画に繋げてます。

長くなってしまいましたが、結論からして画像の読み込みはSpriteからTexture2Dに変えるべきでしょうか?
>>ジゼルさん

>Spriteだと座標が取得できないので

むしろなぜ座標を取得したいと思ってるのかが分からない位で・・・ちゃんと指定した座標にスプライトは描かれているはずなので・・座標にこのソースで言うところのmove_Xとmove_Yを使っちゃダメなんですか?



それときちんと理解したいのであれば、ちゃんとC#の参考文献を読むべきじゃないかと思います。特にクラス関連が読みきれて無いと思いますので。つまらないと思いますが、XNAの本じゃなくて、C#の本です。

このソースだと、規模が大きくなるにつれて把握できなくなるとおもいますよ。現状書かれているのがメインキャラクターのみの処理ですが、このままだと敵キャラなどを入れた時点でかなり大変なソースになると思います。

キャラクターごとに管理するクラスを作って、出来る限り現状のUpdateとDrawでやっている処理をその中に入れてやるなどして、物体ごとや機能ごとにクラスを分けていかないと、とても管理が大変になりそうです。
>> Sunpinさん

そうですね・・・根本的な部分を理解してからですね。
参考書でしばらく勉強してみます。
ご指摘ありがとうございました!
ふと思ったんだが
78のパターン、GoFのStateパターン使ったら綺麗になりそうな気がした。

質問とは関係ないことだけどw
参考になれば。
Content.Load<自作クラス>
で自作クラスを読み込めるようにする方法をご存知の方がいたら
ご教示いただけないでしょうか。

IntermediateSerializer.Serializeを使用して自作クラスをXMLにシリアライズしているのですが、
プロジェクトの保存時、そのXMLが存在する場合、
エラー 1 中間 XML のデシリアライズ中にエラーが発生しました。"自作クラス" 型が見つかりません。
というエラーが発生してしまいます。

http://social.msdn.microsoft.com/Forums/ja-JP/xnagameja/thread/88187b9b-ee65-4896-83af-7203b86b7834
に情報があるのですが、古い情報なのか
記載されているPropertiesのContent Pipeline項目も見当たらず…
J-enさん>
ご回答ありがとうございます!

ご指摘の通り、「PropertiesのContent PipelineにDLLを追加」という操作は、「【Content】の中の【参照設定】に、該当DLLを追加」 という設定にて
コンパイル時のエラーが発生しなくなり、
無事にデシリアライズの動作を行っていることを確認できました。

C#で作ったツールでゲームに使う定義をシリアライズすることで作成し、
それをXNAアプリ側で使用しようと思っており、
最初はXmlReaderを使ったり、Dictionary形式でシリアライズ後に
デシリアライズして、それを使って実際に使用するインスタンスを生成しなおすという方法を行っていたのですが
なんとかできないかなと思っていたので、非常に助かりました。
はじめまして。突然ではあるのですが質問をさせてください。
(少し前にCreatorsClubのフォーラムでも同じ質問をして、回答を得られず無理なのだと諦めていたのですが、やはり気になるので…)

現在、JigLibX(http://jiglibx.codeplex.com/)という物理エンジンを利用して(サンプルプログラムを基に)ゲームを作っており、画面を分割して2人以上でプレイできるようにしたいと思っています。
そこで、このページ(http://asura.iaigiri.com/XNA_GS/xna9.html)を参考にて、試しにJigLibXのサンプルプログラムの画面を左右に分割してみたのですが、うまくいかなくて悩んでいます。
実行したところ、添付している画像のようになってしまいました。

どのようにサンプルプログラムのJiggleGame.csを書き換えたかは以下の通りです。
参考にさせていただいたサイトに書かれている通りに、
最初に
//ビューポートを格納する変数を用意
Viewport defaultViewport;
Viewport leftViewport;
Viewport rightViewport;
Viewport separatorViewport;  と書き、

LoadContent()に
//ビューポートの初期化
defaultViewport = graphics.GraphicsDevice.Viewport;
leftViewport = defaultViewport;
rightViewport = defaultViewport;
separatorViewport = defaultViewport;
//画面左側のビューポート
leftViewport.Width = leftViewport.Width / 2;
//画面中央のビューポート
separatorViewport.X = leftViewport.Width - 1;
separatorViewport.Width = 3;
//画面右側のビューポート
rightViewport.X = leftViewport.Width + 1;
rightViewport.Width = (rightViewport.Width / 2) - 1; と書き加え、

Drawに
protected override void Draw(GameTime gameTime)
{
//左の画面に描画
graphics.GraphicsDevice.Viewport = leftViewport;
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

//左右画面の境目
graphics.GraphicsDevice.Viewport = separatorViewport;
graphics.GraphicsDevice.Clear(Color.White);

//右の画面に描画
graphics.GraphicsDevice.Viewport = rightViewport;
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

base.Draw(gameTime);
}

そもそもこのJigLibXのサンプルにはXファイルのモデルなどを描画する処理がDrawに書かれていないのですが、なぜ描画できているのでしょうか。
今回に関しては、左右どの画面もバックバッファのクリアしかしていないはずなのですが、なぜか右側の画面だけ描画ができています。

長くて申し訳ないのですが、続きます
続きです。
とりあえず、描画できている右画面と、何も描画されていない左画面の違いはbase.Draw(gameTime);の有無だけだと思い、
Drawを
protected override void Draw(GameTime gameTime)
{
//左の画面に描画
graphics.GraphicsDevice.Viewport = leftViewport;
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);

//左右画面の境目
graphics.GraphicsDevice.Viewport = separatorViewport;
graphics.GraphicsDevice.Clear(Color.White);

//右の画面に描画
graphics.GraphicsDevice.Viewport = rightViewport;
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

base.Draw(gameTime);
}
と書き換えたところ、左右に同じ描画がされました。
今までbase.Draw(gameTime);を何個も書くことなんて無かったので上の書き方が正しいのかわからない上に、参考にしたサイトの方もそんな書き方をしていないので悪い方法なのかなと考えています。

そして、ここで問題なのが左右が全く同じ描画がされてしまうという事です。
2人以上でプレイできるゲームを作りたいので、左右の画面でそれぞれ違うカメラのポジションから見ている画面を描画したいと思っています。

サンプルのカメラのポジションは、
camera.Position = Vector3.Down * 12 + Vector3.Backward * 30.0f;と設定されています。
数値で書くと、Vector3(0, -12, 30)の位置にカメラがあります。
このカメラとは別に例えば、(0,-12,10)の位置に2つ目のカメラを設定したいと考えているのですが、
元々あるカメラ(camera.Position)と2つ目のカメラの両方から見ている画面になってしまいグチャグチャになってしまいます。
左画面では元々あるカメラ、右画面では新しく設定したカメラからの視点でプレイできるようにしたいのですが、どなたか設定方法を知っている方おりましたら教えていただけませんか?

(ちなみに、PhysicObject.csというクラスのDraw()の中にモデルを描画する処理のようなものを見つけたのですが、これをどう書き換えたらよいのかが検討もつきません…。)

長くなってしまってすみません。
>J-enさん
回答ありがとうございます!ちゃんと左右で違う描画ができました

>JiggleGame.cs の Updateメソッドをよく見れば、その中で
>camera.Position = character.PhysicsBody.Position + Vector3.Up;
>と、値が更新されている

この部分が自分の持っていたサンプルにはなかったので、JigLibXのサイトを見に行ったところ
JigLibX_Characterなんてサンプルがあったんですね、ずっと知りませんでした。
こっちのサンプルの方が使いやすそうです

これからViewマトリクスについて調べ、把握した上で、
左画面:WとSで前進後退、AとDはキャラクタの角度(視点の方向)だけ変更
右画面:↑↓で  〃   、←→で   〃
に変更して、ついでに3人称視点にしてみようと思います。

また何かわからない事が出てきてしまう気がしますが、その時は質問させていただきたいと思います。
ありがとうございました!
もしかして、プレミアムメンバーシップを2つ取ったら20個までOKとか、そういうことなんでしょうか。ほっとした顔
メッセージを見る限り、マテリアルの設定されていないジオメトリ(メッシュを、さらにマテリアル毎に
分けたもの)があるようですね。アニメーション以前に、モデルそのものをインポートするのが
うまく行っていないのではないかと。


さて、XNAのランタイムライブラリ内にはそもそもアニメーション表示のクラスが含まれていません。
パイプライン側にカスタムインポータ&プロセッサ作成を補佐するクラスが若干あるだけです。
要するに、本来ならば自作するしかないのです。このコミュニティでも何人かの方がアニメーションに
挑戦されていますが、話を聞く限り恐らくはほとんどの方が自作でしょう。

とは言え、「XSI Mod Tool&対応ランタイム」や、海外の有志が作ったライブラリ(ACLなど)が
あるにはあるますし、「ひにけにXNA」でもスキンアニメーションのサンプルはあったはずですが、
RokDeBone2用のライブラリは今のところ知りません…。

今、MSのXNA担当者HigenekoさんがMetasequoia用エクスポートプラグイン
&インポートツールを作っているとのことです。keynoteプラグインに対応して
アニメーションも出力できるようになる可能性もありますので、声援を送るのが簡単です。あせあせ
一つ思い出しましたので追記。

XファイルはDirectXのヘルパAPIで読み込むことができますが、そのさいマテリアル名だけは
取得できないというとんでもない仕様です。

http://social.msdn.microsoft.com/Forums/ja-JP/xnagameja/thread/556c814c-d39e-409e-83ea-b6a09c82e0fb

あくまで推測ですが、そちらで試された
>XデータをModtoolでfbx化したデータをXNA
という手順のさい、もしMod Toolが手抜きしてこのAPIでXファイルを読み込んでいたとしたら、
その時点でマテリアル名が抜け落ちてしまっている可能性があります。

どのみち、アニメ以前のモデルの時点での問題ということになりますが…。
>ダニエル
大雑把に左右の判定だけで言うと、プレイヤーキャラクターの座標が(Px,Py)がだとして

・自分の進行方向が右の場合
(Px+50,Py)がプレイヤーキャラクターの右端より1ドット右になるので、
stage1[(int)(Py / 50), (int)((Px+50) / 50)]をチェックする。

・自分の進行方向が右の場合
(Px-1,Py)がプレイヤーキャラクターの左端より1ドット左になるので、
stage1[(int)(Py / 50), (int)((Px-1) / 50)]をチェックする。

ことで、とりあえずそこに地形があるかどうかを確認できます
(PxとPyが小数ではなくもともとintなら、(int)(...)は必要ありません)。
はじめまして。

現在、XNAにて2Dゲームを作成しております。
Texture2Dに格納した画像をSpriteBatch.Draw()で拡大・縮小表示する時、
バイキュービック法での拡大・縮小表示をしたいのですが、
実装方法についてご教示いただけますでしょうか。

通常レンダリングステートで

GraphicsDevice.SamplerStates[0].MagFilter = TextureFilter.Linear;
GraphicsDevice.SamplerStates[0].MinFilter = TextureFilter.Linear;

のような設定をしますが、
TextureFilterの中にはバイキュービックが無いので
2Dシェーダーでの実装になりますでしょうか。

よろしくお願いします。

Xbox one でインディーズ

http://www.itmedia.co.jp/news/articles/1307/25/news145.html
XNA 4.0 とは違う次があるかどうかは分かりませんが、
XBOXONEでもインディーズは健在なようです。
>デミオさん

逆に質問ですが、それをやって視覚的な効果は大きいのでしょうか?
http://tt.sakura.ne.jp/~hiropon//lecture/trans.html

ちなみに、XNA4.0 では乗算済みアルファ機能が追加されたので、
無理してバイキュービックを導入する必要はない印象を受けました。
http://blogs.msdn.com/b/ito/archive/2010/06/04/pre-multiplied-alpha-blending-of-xna-game-studio-4-0.aspx
XNA4.0より古いバージョンなら移行する必要があります。

もしくは、いっそLODの概念を導入すれば視覚的な効果は高いかと思います。
ただし、メモリー圧迫は免れませんが。

ログインすると、残り76件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

ゲーム用統合開発環境 XNA 更新情報

ゲーム用統合開発環境 XNAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング