ページ 11

ある関数で読み込んだ画像をクラスで共有したい

Posted: 2015年12月20日(日) 18:24
by moba
お世話になります。
VC++(2010Express)/Dxlibで取り組んでいます。
マップを表示する仕組みを考えていて、だいたい以下のように取り組みました。

コード:

//ヘッダファイル
class MAP
{
public:
	int tileDiv[40];
	MAP(){ LoadDivGraph("(画像のパス)",40,8,5,32,32,tileDiv) }
};

//cppファイル
void DrawMap(){
		//LoadDivGraph("(画像のパス)",40,8,5,32,32,tileDiv);//これを入れれば表示できる
		DrawGraph(32,32,tileDiv[0],TRUE);//このままでは表示されない
}
main関数からMAPクラスをインスタンス化して、DrawMap()を呼び出しました。
するとコメント文の通り、DrawMap()内で再び画像を読み込まなければ何も表示されませんでした。
MAP()が終わっても読み込んだ画像は開放されず、MAPクラスのメンバ変数tileDivにハンドルが保存されたままで、DrawGraph()の1行で表示できると僕は予想していました。なぜ表示できないのか教えていただけませんか。

Re: ある関数で読み込んだ画像をクラスで共有したい

Posted: 2015年12月20日(日) 18:41
by hide
DxLib_Init() より前にMAPクラスをインスタンス化しているとか?
コードが足らないと予想にしかならないね。

Re: ある関数で読み込んだ画像をクラスで共有したい

Posted: 2015年12月20日(日) 18:43
by moba
回答ありがとうございます。
入り組んでいるので、その部分だけ書きなおしてきます。
書きなおしたらまた貼りますね

Re: ある関数で読み込んだ画像をクラスで共有したい

Posted: 2015年12月20日(日) 19:12
by moba
うおおおおおおおおおおおお
hideさん、それでした! ヒープ領域を破壊(?)するバグもなおって、あなたのおかげで僕の10時間が実りました! ありがとうございます!
ちなみに、その発想がどのようにして得られたのか教えていただけませんか。

Re: ある関数で読み込んだ画像をクラスで共有したい

Posted: 2015年12月20日(日) 19:28
by hide
1行分をコピーしただけなら変わるのは順番ぐらいですから。
tileDivがpublicになってたりとあまりなれてなさそうだったのでそう思っただけです。

というか、ちょくちょくそのミスを見かけるのです。

Re: ある関数で読み込んだ画像をクラスで共有したい

Posted: 2015年12月20日(日) 19:46
by moba
やはり経験が無いと分からないものなのでしょうか。
これからも、どうしても調べて分からない時は質問させていただこうと思います。ありがとうございました。

Re: ある関数で読み込んだ画像をクラスで共有したい

Posted: 2015年12月20日(日) 20:08
by hide
この場合はDxLibのログになんか残ったりしないんでしたっけ?
残るのだったら、画像読み込めてないおかしいなログ見ようで10分解決出来たかもしれません。
あとはtileDivの変数の中身をprintfDxしてみるとか。
ブレークポイントおいたりでしっかり通ってるかチェックしたり。

経験も大事ですが、バグに対して使えるブキを増やしていきましょう。

追加の質問

Posted: 2015年12月21日(月) 14:49
by moba
ブキ、手にしたいですね。

Dxlibのログはたぶん画面下の「出力」のウィンドウに出るのですよね。
画像を読み来ないというログを見た気がするのですが、他の理由と思いこみ、暫定的な対応をして忘れてしまっていました。

tileDivの中身は、クイックウォッチをしたら、[0]が-1、[1~]が0だったような気がします。
読みこめていたらアドレスが入っているのでしょうね。もうちょっと頭を働かせたかったです。