ページ 11

C# Box2D 画像適用2

Posted: 2010年10月04日(月) 19:46
by
「C#の基礎を固めては?」と言われて、そう決めたのですが、また投稿してしまいました。
何度もすみません。

C#をもっと勉強することに決めてC#の本も買って何度も読んだので、基礎中の基礎は理解したつもりです。
ですが、やっぱり目標がないと、次に何を勉強すればいいのか分かりません。

そこで、もし答えてくださるのであれば、
今の私ではとうてい理解できないような難しい回答でも構いませんので、
やり方だけでも教えていただけないでしょうか?

やりたいことは、
前回教えてくださったBox2Dのオブジェクトに画像を適用する方法では、すべてのオブジェクトが同じ画像になってしまうので、
各オブジェクトごとに違う画像を適用することです。

使用言語はVC#です。

もうサンプルコードに頼ったりせず、自分でしっかり考えようと思っています。
回答が理解できるように一生懸命がんばりますので、よろしくお願いします。

最後に、いつもわがままばかり言ってごめんなさい。

Re:C# Box2D 画像適用2

Posted: 2010年10月06日(水) 23:07
by
できればJustyさん、回答お願いします。

Re:C# Box2D 画像適用2

Posted: 2010年10月07日(木) 01:52
by Justy
>Box2Dのオブジェクトに画像を適用する方法
 Imageを必要な数の分だけ持っておきます(ロードしておく)。
 ここまではいいですよね?

 Bodyクラスはメソッド SetUserDataを使って何か情報を設定しておくことができます
(引数は object型なのでどんな型でも受け付けます)。
 そうするとメソッド GetUserDataを使い、設定した時の型でキャストすればその情報を取り出すことができます
(設定していなかったり、設定したときの型と異なると例外が出るので注意)。

 これを利用して、全てのBodyの生成時にとりあえず種類を表す何か(enumとか数値とか)を入れておいて、
描画時に取り出して調べればそれが何のオブジェクトなのかわかるので、それに対応した
Imageデータを使って表示すればOKです。

Re:C# Box2D 画像適用2

Posted: 2010年10月07日(木) 07:16
by
ほんといつもありがとうございます。

2段落目からを理解できるように勉強するつもりなんですが、
これは理解して成功したときに「解決」にすればいいのでしょうか?(時間がかかると思うので。)

Re:C# Box2D 画像適用2

Posted: 2010年10月07日(木) 21:06
by
初期化の時に
   m_Image = Image.FromFile("****.jpg");
でロードして、

オブジェクト作成の後に
   body.SetUserData("body1");
で設定、

描画時に
   string body1 = (string)body.GetUserData();
で取り出す
と考えたのですが、どこまで合っていますか?

あと、「調べればそれが何のオブジェクトなのかわかるので、それに対応したImageデータを使って表示する」
というところは、まだ考えている途中です。(苦戦中)

Re:C# Box2D 画像適用2

Posted: 2010年10月08日(金) 01:08
by Justy
>これは理解して成功したときに「解決」にすればいいのでしょうか
 まぁそうですね。


>どこまで合っていますか
 文字列にしたのですね。イメージを1種類しかロードしていないような気もしますが
そこを除けば合っています。


>調べればそれが何のオブジェクトなのかわかるので
 オブジェクトの種類毎に異なる文字列に、例えば右クリックで生成されるBodyには "right"を、
左クリックで生成されるBodyには "left"の文字列を入れておけば、取り出したときに
どっちの文字列が入っているかで種類を区別できますよね?

Re:C# Box2D 画像適用2

Posted: 2010年10月08日(金) 07:26
by
>イメージを1種類しかロードしていないような気もしますが
大丈夫です。きちんと必要な分だけロードしています。

オブジェクトの区別は、
   string body1 = (string)body.GetUserData();
   if (body1 == "right")
   {

   }

という感じでいいですか?
ifの{ }の中はまだ分かりませんが...

Re:C# Box2D 画像適用2

Posted: 2010年10月08日(金) 23:45
by Justy
>という感じでいいですか
 SetUserDataを使って種類毎に設定済みであるならOKです。

>ifの{ }の中はまだ分かりませんが
 その中で何をするべきなのか説明できますか?

Re:C# Box2D 画像適用2

Posted: 2010年10月09日(土) 08:17
by
すみません。よく考えたらできました。
{ }の中で前回の描画の仕方を使えばよかったのですね。

やりたかったことが出来てとても嬉しいです。
Justyさん、ほんとありがとうございました。

また考えても分からないことがあれば、そのときはどうかよろしくお願いします。

では。 画像