トップページ > 記事閲覧
MakeScreenに作成したスクリーンに画像の描画
名前:タマ 日時: 2016/09/02 16:09

関数MakeScreenによって作成したスクリーンに画像を描画し、その後、 そのスクリーンの内容を裏画面に描画したいのですが、最後の描画だけが画面に反映されます。 以下のコードを作成しました。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { //ウィンドウ生成と、DXライブラリ初期化 ChangeWindowMode(TRUE); SetGraphMode(800, 600, 32); if(DxLib_Init() == -1) return -1; //ウィンドウと同じ大きさのスクリーンを作成 int ScreenHandle = MakeScreen(800, 600, TRUE); while(1){ //エラーが起きたらループを抜ける if(ProcessMessage() == -1) break; //裏画面の内容を初期化する SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); //三回繰り返す for(int i = 0; i < 3; i++){ //作成したスクリーンを初期化し、そこを描画先にする FillGraph(ScreenHandle, 0, 0, 0, 0); SetDrawScreen(ScreenHandle); //作成したスクリーンに半径100の白い円を描画する int DrawX = 100; int DrawY = 100 + i * 200; SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255); DrawCircle(DrawX, DrawY, 100, GetColor(255, 255, 255), TRUE); //作成したスクリーンの内容を裏画面に描画する SetDrawScreen(DX_SCREEN_BACK); SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255); DrawGraph(0, 0, ScreenHandle, TRUE); } //画面を更新 ScreenFlip(); } //DXライブラリ使用の終了処理 DxLib_End(); return 0; } はじめに、ウインドウの大きさと同じサイズのスクリーンをMakeScreenによって作成します。 その後、その作成されたスクリーンの内容をFillGraphによって初期化し、白い円を描画します。 そして、そのスクリーンの内容を裏画面に描画します。 これを円の描画座標を下にずらして三回行っています。 三つの白い円が縦に並んで表示されることを期待しているのですが、これを実行しますと、三つ目の円しか描画されません。 これの理由が分かる方がいらしたら、回答お願いします。 (プログラミングにはVisualStudio2008を利用しています。また、Dxライブラリのバージョンは3.16dです)
メンテ

Page: 1 |

Re: MakeScreenに作成したスクリーンに画像の描画 ( No.1 )
名前:へけぽん 日時:2016/09/03 13:38

FillGraph(ScreenHandle, 0, 0, 0, 0);で塗りつぶした場合、透過色扱いになっていないのかもしれません //三回繰り返す for(int i = 0; i < 3; i++){ //作成したスクリーンを描画先にして初期化する SetDrawScreen(ScreenHandle); ClearDrawScreen(); //作成したスクリーンに半径100の白い円を描画する int DrawX = 100; int DrawY = 100 + i * 200; SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255); DrawCircle(DrawX, DrawY, 100, GetColor(255, 255, 255), TRUE); //作成したスクリーンの内容を裏画面に描画する SetDrawScreen(DX_SCREEN_BACK); SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255); DrawGraph(0, 0, ScreenHandle, TRUE); } //画面を更新 こんな風に変えてみたらどうでしょうか
メンテ
Re: MakeScreenに作成したスクリーンに画像の描画 ( No.2 )
名前:管理人 日時:2016/09/03 22:34

すみません、DXライブラリのバグです 修正版をアップしましたので、よろしければお使いください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > へけぽんさん > FillGraph(ScreenHandle, 0, 0, 0, 0);で塗りつぶした場合、透過色扱いになっていないのかもしれません 私も最初それが原因かと思ったのですが違う原因でした (- -; ( 高速描画のために DrawGraph の時点では描画処理を保留しているのですが、 FillGraph が実行された際に保留していた描画処理を実行するという処理を行っていませんでした orz ( ClearDrawScreen では行っているので、FillGraph の代わりに ClearDrawScreen を使用すると正常な結果が得られます ) )
メンテ
Re: MakeScreenに作成したスクリーンに画像の描画 ( No.3 )
名前:タマ(解決) 日時:2016/09/03 23:46

へけぽん様、管理人様 ご回答いただきありがとうございますm(_ _"m) お陰様で期待通りの描画を行うことができました。
メンテ

Page: 1 |

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

   クッキー保存