ページ 11

C# Box2D 画像適用

Posted: 2010年9月27日(月) 22:31
by
先日マウスジョイントについて質問させていただいたblack_catです。

今度はBox2Dのオブジェクトに画像を適用させたいのですが、
方法を教えていただけないでしょうか?

環境は前回と同じく[Visual C# 2010]です。

前と同様、Flash版を見てやり方の簡単な流れは分かったのですが、
そこから先をどうしていいのかが分かりません。

また前のサンプル(ttp://dokokano.net/~fslasht/warehouse/programs/testBox2d_20090318.zip )
を例に教えて頂けるとうれしいです。

よろしくお願いします。

Re:C# Box2D 画像適用

Posted: 2010年9月28日(火) 18:25
by Justy
 画像の描画の仕方は判りますか?

Re:C# Box2D 画像適用

Posted: 2010年9月28日(火) 19:51
by
pictureBox1を配置して
pictureBox1.Image = "画像名";
とするのですか?

Re:C# Box2D 画像適用

Posted: 2010年9月28日(火) 20:17
by Justy
 PictureBoxより DrawImageメソッドの方が楽です。
 こちらを参考にして下さい。

画像、印刷: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/graphics/index.html
http://dobon.net/vb/dotnet/graphics/drawimage.html
http://dobon.net/vb/dotnet/graphics/transform.html

Re:C# Box2D 画像適用

Posted: 2010年9月28日(火) 22:49
by
ありがとうございます。

貼ってくださったリンクを見ながらですが、
DrawImageでの描画はできました。

Re:C# Box2D 画像適用

Posted: 2010年9月30日(木) 20:03
by
すみません。
文章がややこしかったですね。

普通にDrawImageでの画像の描画はできましたが、
Box2Dではやり方が分かりません。

もっと勉強していれば、DrawImageが分かった時点でできるのかもしれませんが、
分からないので教えていただけないでしょうか?

Re:C# Box2D 画像適用

Posted: 2010年9月30日(木) 23:00
by Justy
>Box2Dではやり方が分かりません。
 基本的な使い方は同じです。
 先に紹介したページの e.Graphicsに相当するのが m_grfxメンバになります。

 手っ取り早く表示させるだけなら、Imageクラスをメンバに持ち、初期化時に適当な画像を読み込んでおいて下さい。
 次に DrawBox関数の whileの辺り(後でも先でも構いません)にでも m_grfx.DrawImage(Imageメンバ名, -1, -1, 2, 2)の一文を入れて下さい。

 これだけで表示ができるようになります。
 ただ、実際には上の DrawImageでは幅・高さを2と決め打っているので、ボックス生成時の
SetAsBoxの値を保存しておくなり、頂点情報から推測するなりして適切な値にする必要があるでしょう。

Re:C# Box2D 画像適用

Posted: 2010年9月30日(木) 23:50
by
ありがとうございます。
難しそうですが、がんばってみます。

Re:C# Box2D 画像適用

Posted: 2010年10月01日(金) 22:38
by
何度もすいません。

結構がんばってみたつもりなんですが、やっぱりつまずきました。

とても基本的なことなのでしょうが、
「Imageクラスをメンバに持つ」とはどういうことでしょうか?
調べてみたのですが、いまいち分かりません。

あと、初期化時とはいつのことなのでしょう?
Box2Dの初期化時に画像をロードしても、当たり前ですが「名前 'bmp' は現在のコンテキスト内に存在しません。」
と言われます。

よろしくおねがいします。

Re:C# Box2D 画像適用

Posted: 2010年10月01日(金) 23:38
by Justy
 Box2Dとか Imageとかの前にもう少し C#の習熟度を上げる方が先なのではと思わなくもないですが。


>「Imageクラスをメンバに持つ」とはどういうことでしょうか?
 m_grfx等のようなクラスのメンバ変数……http://msdn.microsoft.com/ja-jp/library ... S.80).aspxとして定義する、ということです。


>初期化時とはいつのことなのでしょう?
 Box2Dの初期化をしているところでいいですよ。
 
 
>Box2Dの初期化時に画像をロードしても、当たり前ですが「名前 'bmp' は現在のコンテキスト内に存在しません。」
 状況があまりつかめないのですが、その bmpはフィールドですか?
 ひょっとしてローカル変数に対してロードしていたりしませんか?

Re:C# Box2D 画像適用

Posted: 2010年10月02日(土) 07:14
by
ほんと勉強が足りないなぁ と自分でも思ってはいるのですが・・・

調べた結果、フィールドの意味は分かりました。(たぶん)
でもやっぱり、やり方は分かりませんでした。

何度も悪いのですが、教えていただけますか?
ほんとすいません。

Re:C# Box2D 画像適用

Posted: 2010年10月02日(土) 14:28
by Justy
 まずはメンバの追加。
 23行目(8行数は全てオリジナルコード上の行数です)に
[color=#d0d0ff" face="monospace]
Image m_Image;
[/color]
を追加します。

 イメージのロードは frmMain関数内の 37行目に
[color=#d0d0ff" face="monospace]
m_Image = Image.FromFile("xxxx.png");
[/color]
を追加します。xxxx.pngは適当な画像ファイルを指定して下さい。

 最後に描画、186行目に
[color=#d0d0ff" face="monospace]
m_grfx.DrawImage(m_Image, -1, -1, 2, 2);
[/color]
を追加します。

 これだけです。


 これで表示されなければ、再度訊いてください。
 うまく表示ができたのなら、次のステップに進む前に C#の基礎を固めるのがいいでしょう。

Re:C# Box2D 画像適用

Posted: 2010年10月02日(土) 18:00
by
本当に申し分けございません。

[2010/10/02(土) 07:14 No:62530]   の投稿の前に、調べた通りにやってみてエラーが出たのは、
ファイル名が間違っていたからでした。

Windows7のサンプルピクチャを使っていたのですが、フォルダのアイコンの下に表示されている名前は
本当の名前じゃなかったんですね。
[C:\\Users\\Public\\Pictures\\Sample Pictures\\ペンギン.jpg]でやっていたのですが、
本当は[ペンギン.jpg]じゃなくて[Penguins.jpg]でした。

というわけで解決しました。
とっても基本的なミスですいませんでした。

やっぱりC#の基礎を固めたほうがいいんですね。
たしかに自分でもそう思います。

次はBox2Dのオブジェクトごとに、違う画像を表示する方法をお聞きして、
作りたかったものが完成する予定だったのですが・・・
とても残念です。

これからはC#の書籍などを買ってしっかり勉強します。

何度もすばらしい回答をくださって、本当に本当にありがとうございました。