トップページ > 過去ログ > 記事閲覧
GetDrawScreenGraphについて
名前:いせみや 日時: 2007/02/13 07:26

はじめまして。 DXライブラリを使用してゲームを開発させていただいているいせみやという者です。 このような有用なライブラリを公開してくださっていることに感謝しています。 さて、本題ですが、次のような不具合が発生しました。 「ScreenFlipで画面を奇数回交換した後に、裏画面に対してGetDrawScreenGraphを 使用すると、正常に取得できない」 というものです。 偶数回の描画後の場合は正常に取得できました。 また、SetUse3DFlag( FALSE )かSetScreenMemToVramFlag( FALSE )を 使った場合には正常に動きましたので、環境の問題だとは思います。 ですがこれではかなり遅くなってしまうので、ScreenFlipの 代わりにScreenCopyを使用することでひとまず解決しました。 ただ多少処理負荷があがるということで、もし直す方法にお心当たりがあるようでしたら うかがいたいと思い書き込んだ次第です。 以下は問題の発生するプログラムです。(ライブラリのバージョンは2.22fです) まず一回ScreenFlipしてから裏画面に1000個の点を描画し、 それを取り込んでおいて、いったん消去して取り込んだデータから描画しています。 ----------------------------------------------------------------------- #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int i ; int Cr ; int x , y ; int GHandle ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先画面を裏にする ScreenFlip() ; // 裏画面と表画面を交換 Cr = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 for( i = 0 ; i < 1000 ; i ++ ) // 1000個の点を描く { DrawPixel( GetRand( 640 ) , GetRand( 480 ) , Cr ) ; } GHandle = MakeGraph( 640 , 480 ) ; // 画面のサイズと同じサイズのグラフィックを作成 GetDrawScreenGraph( 0 , 0 , 640 , 480 , GHandle ) ; // 画面データの取りこみ ScreenFlip() ; // 裏画面の内容を表画面に反映 WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用) ClearDrawScreen() ; // 裏画面を初期化 DrawGraph( 0, 0, GHandle, FALSE ) ; // 取り込んでおいたグラフィックを描画 printfDx( "GetDrawScreenGraph" ) ; ScreenFlip() ; // 裏画面の内容を表画面に反映 WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } ----------------------------------------------------------------------- 正常なら二回とも同じ画面が表示されるはずですが、これを実行すると二回目の画面 (GetDrawScreenGraphが表示される画面)は真っ黒となってしまいます。 最初のScreenFlipを偶数回(0,2,4,...)とするか、 SetUse3DFlag( FALSE )かSetScreenMemToVramFlag( FALSE )を入れれば正常に表示されます。 なお、私の環境は OS:Windows XP, CPU:Athlon64 3000+, メモリ:1GB, VGA:RADEON 9250 です。

Page: 1 |

Re: GetDrawScreenGraphについて ( No.1 )
名前:管理人 日時:2007/02/13 14:17

 いせみやさん始めまして、DXライブラリの管理人です。  掲載して頂いたプログラムを私の環境で実行した限りでは GetDrawScreenGraph で取り込んだ画像を表示している2回目も正常に 表示されました。  もしかしたら私の手元にある最新版では直っているかもしれませんので、 宜しければこちらをお使いになってみて下さい。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)  ちなみに、ScreenCopy は SetUse3DFlag( FALSE ); や SetScreenMemToVramFlag( FALSE ); を使用した場合に比べれば負荷はかなり小さいですので、ScreenCopyで 問題が無ければ ScreenCopy をお使い下さい。
Re: GetDrawScreenGraphについて ( No.2 )
名前:いせみや 日時:2007/02/13 14:53

管理人様、すばやいお返事どうもです。 いただいた最新版で試してみましたが、状況は同じです。 ですが、一度だけ正常に表示されました(ソースにはまったく手を加えていない状態で) ので、やはり私の環境に問題があるようです。 ScreenCopyでも体感ではほとんど違いはないので、ScreenCopyを使うことにします。 お手数かけてすみません。 これでまた製作が続けられます。ありがとうございました。

Page: 1 |