トップページ > 記事閲覧
MakeScreenに失敗?
名前:spaaaark・∀・ 日時: 2014/08/29 16:26

http://dixq.net/forum/viewtopic.php?f=3&t=15611 とのマルチポストとなります。 URL先のソースコードを実行したところ、MakeScreenでハンドルは返ってきているのにChangeWindowMode が失敗し、また追記の記事のようにDrawGraphも戻り値としてエラーを返してしまいます。 恐らく無効なハンドルを返しているのだろうと思います。 気になったのは、リファレンスのサンプルプログラムは正常に動作したにもかかわらず、 この関数に同じものを入れて動作をさせるとエラーになったことです。 このあたりから少しライブラリのバグを疑い始めているのですが、それが真であれ偽であれ、 現在バグの原因がつかめずに困っています。どなたか意見をくださると助かります。 よろしくお願いします。 なお、必要であればプロジェクトやソースコードは極力閲覧できるようにしたいと思います。
メンテ

Page: 1 |

Re: MakeScreenに失敗? ( No.1 )
名前:管理人 日時:2014/08/30 14:26

リンク先のスレッドにあるspaaaark・∀・さんが作成されたプログラムを一部使用して 以下の様なテストプログラムを組んでみましたが、正常に動作しました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int DefGraphID ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 画像の読み込み DefGraphID = LoadGraph( "Test1.bmp" ) ; const int TextureID = DxLib::MakeScreen( 256, 256 ) ; // 描画対象を画像データセットに変更 int a = DxLib::SetDrawScreen(TextureID); // 描画対象スクリーンから指定範囲のグラフィックを読み込む DxLib::DrawRectGraph(0,0,0,0,64,64,DefGraphID,TRUE,FALSE); // 描画対象を元に戻す DxLib::SetDrawScreen(DX_SCREEN_BACK); // 画面に TextureID を描画 DrawGraph( 0, 0, TextureID, TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 恐らくシンプルなテストプログラムでは再現しない現象だと思いますので、 もし不都合がなければ実際に実行して現象を確認できるプログラムと、実行に必要なファイルを圧縮してこちら BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください ) に送っていただけないでしょうか?
メンテ
Re: MakeScreenに失敗? ( No.2 )
名前:spaaaark・∀・ 日時:2014/08/31 05:18

私用により返信が遅くなってしまい大変申し訳ないです。 メールをお送りしましたので、確認の方をよろしくお願いいたします。 追記 少しデバッグ中でコードが汚い部分があり、送信してから件の関数に処理が飛ばない (コメントアウトしていた)事が発覚してしまいました。申し訳ありませんが、 GameMainPhaseManage.cppの方に呼び出し部分がありますので、その部分のコメント アウトを解除していただくよう対応をお願いしたいです。 その部分のコードは96行目で、 Success &= m_7segManage->Draw(pGraphData); となっているところです。
メンテ
Re: MakeScreenに失敗? ( No.3 )
名前:管理人 日時:2014/08/31 11:28

メールありがとうございます、現象を手元で確認できました 原因は SetUseASyncLoadFlag( TRUE ) ; を実行して非同期読み込み設定の状態で MakeScreen を 実行しているため、まだ MakeScreen の処理が完了していない状態で SetDrawScreen に MakeScreen の戻り値のグラフィックハンドルを渡しているので正常に動作しないというものでした なので MakeScreen を実行する前に SetUseASyncLoadFlag( FALSE ) ; を実行して非同期読み込み設定を 解除するようにしたところ、正常に動作しました よろしければお試しください
メンテ
Re: MakeScreenに失敗? ( No.4 )
名前:spaaaark・∀・(解決) 日時:2014/08/31 13:41

盲点でした…。ファイル読み込みクラスでフラグをリセットしていないことが原因でした。 リセットするような処理に変更したところ、こちらでも正常に表示されることが確認できました。 わざわざ調査の方、ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存