トップページ > 記事閲覧
SetUseASyncChange(略)について
名前:SweetBlack 日時: 2015/05/13 18:39

いつもお世話になっております。 すみません、以前からおかしいと思いつつも、自分のプログラムのどこかに原因があるんだろうと放置していた事を改めて調べてみたのですが、どうにもわからなかったので質問させて頂きます。 以前に SetUseASyncChangeWindowModeFunction という命令で ウィンドウモードとフルスクリーンを切り替えられるという事を教えていただいたのですが、 これを使うと、モードを切り替えたあとになぜか処理速度が遅くなってしまいます。 サンプルプログラムを後述します。 このサンプルでは白いBOXを1ドットずつずらしながら表示していきます。 プログラム実行時には1ライン分動くのに5秒程度なのですが 一度ALT+ENTERでウィンドウモードにすると7秒かかるようになってしまいます。 もう一度フルスクリーンに戻しても遅いままです。 このプログラムでは初期がフルスクリーンですが、初期がウィンドウでフルスクリーンに切り替えたとしても同じように遅くなるはずです。 原因に心当たりがおありでしたらご教示くださると幸いです。 //ここからサンプル========================== //フルスクリーンモードの異状調査サンプル #include "DxLib.h" int WINDOW_MODE = 0 ; //初期ウィンドウモード //==Windowモードチェンジ======================================================== void WINDOW_MODE_ALTENTERchange( void* para ) { // ウインドウモードで起動しているかどうかを取得する( 戻り値 TRUE:ウインドウモード FALSE:フルスクリーンモード ) if ( GetWindowModeFlag() ) { WINDOW_MODE = 1 ; } else { WINDOW_MODE = 0 ; } ; return ; } //-------------------------------------------------------------------- //========================================================================== int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // 最大化ボタンやALT+ENTERキーによる非同期なウインドウモードの変更の機能の設定を行う SetUseASyncChangeWindowModeFunction( TRUE , WINDOW_MODE_ALTENTERchange , &WINDOW_MODE ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // 描画先画面を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; int x = 0 , y = 0 ; //================================================================= //==  メインループ  =========================================== //================================================================= while ( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) == 0 ) { DrawBox( x , y , x + 10 , y + 10 , GetColor( 255 , 255 , 255 ) , TRUE) ; // 四角形を描画 x ++ ; if ( x >= 320 ) { x = 0 ; y ++ ; if ( y >= 240 ) y = 0 ; } ScreenFlip() ; if( ProcessMessage() == -1 ) { break ; } } //================================================================= //==  メインループ エンド  =================================== //================================================================= InitGraph() ; // DXライブラリ使用の終了 DxLib_End() ; // ソフトの終了 return 0 ; } //==========================================================================
メンテ

Page: 1 |

Re: SetUseASyncChange(略)について ( No.1 )
名前:管理人 日時:2015/05/14 04:41

SetUseASyncChangeWindowModeFunction はDXライブラリ内部で ChangeWindowMode を実行する関数ですので、 普通に ChangeWindowMode を使用した場合と同じく描画関係の設定がリセットされます なので、SetDrawScreen( DX_SCREEN_BACK ) ; の設定もリセットされ描画対象が表画面に戻っているので そのままだと表示がカクついてしまいます WINDOW_MODE_ALTENTERchange 関数の中に SetDrawScreen( DX_SCREEN_BACK ) ; を追加していただければ 動作が遅くなる現象が直りますので、よろしければお試しください
メンテ

Page: 1 |

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

   クッキー保存