トップページ > 過去ログ > 記事閲覧
vectorを用いての画像描画
名前:木葉 日時: 2010/03/21 17:46

3/21 17:41に一部修正しました。 現在、画像を読み込んで表示するプログラムを作成しております。 具体的には、下記のようにクラスの中にある画像ハンドルを、DrawRectGraphにて描画しております。 class Sprite{ void Draw(); // DrawRectGraph描画処理 int Load(); // 画像ファイルを読み込み int grpHandle; // 画像のハンドル } class Unit{ void Draw(); // SpriteのDrawを呼び出し int Load(); // SpriteのLoadを呼び出し Sprite spr; // スプライト } class Action{ void Draw(); // UnitのDrawを呼び出し Unit unit; vector<Unit> units; } ここで、下記のようなコードを書きました。 void Action::Draw(){ // 読み込み処理 unit.Load("ファイルパス"); Unit workUnit; workUnit.Load("ファイルパス"); units.push_back(workUnit); // 描画処理 unit.Draw(); ←描画される workUnit.Draw(); ←描画される } void Action::main(){ unit.Draw(); ←描画される units[0].Draw(); ←描画されない } なお、units[0]の画像ハンドルを見ると有効そうな値は入っているのですが、DrawRectGraphで-1が返ってきてしまいます。 色々ずっと試していたのですが、どうしても分らず質問させて頂きました。 もし少しでもおかしい所がありましたらご指摘くださるととても助かります。 どうぞよろしくお願いします。

Page: 1 |

Re: vectorを用いての画像描画 ( No.1 )
名前:いっち 日時:2010/03/21 18:40

DeleteGraphのような処理を何処かで行っていますでしょうか? 具体的には各クラスのコンストラクタとデストラクタの動作を知りたいです。
Re: vectorを用いての画像描画 ( No.2 )
名前:木葉 日時:2010/03/21 18:43

お返事ありがとうございます! DeleteGraphは行っておりません。 その後色々テストした所、Action::Drawを下記のように修正すれば表示される事が分りました。 ここで、下記のようなコードを書きました。 void Action::Draw(){ // 読み込み処理 Unit wkUnit; units.push_back(wkUnit); units[0].Load("ファイルパス"); } もしかして、自然変数をVectorに追加した場合、Draw()を抜けた瞬間に画像がメモリから解放されてしまうのでしょうか・・・。 動くには動いたのですが、どうも力技な上納得が出来ずです。
Re: vectorを用いての画像描画 ( No.3 )
名前:いっち 日時:2010/03/21 19:24

グラフィックハンドルの開放と、クラスインスタンスの削除は別のことですので、 vector<Unit>内に値が正しく格納されていれば動作すると思います。 こういった場合、コピーコンストラクタや、代入演算子、デストラクタが正しく動作していない事が 考えられますので確認なさってみて下さい。
Re: vectorを用いての画像描画 ( No.4 )
名前:木葉 日時:2010/03/21 19:45

なるほど・・・。 コピーコンストラクタ等特別な処理をしている所がありますので、そこを調査してみようと思います。 色々とご助言を下さりありがとうございました。

Page: 1 |