トップページ > 過去ログ > 記事閲覧
ChangeFontTypeのバグ?
名前:無名 日時: 2011/11/24 03:17

ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE ); SetFontSize( 38 ) ; DrawString( 100 , 100 , "DXライブラリ" , GetColor( 255,255,255 ) ) ; ChangeFontType( DX_FONTTYPE_ANTIALIASING ) ; SetFontSize( 16 ) ; DrawString( 0 , 0 , "テスト" , GetColor( 255,255,255 ) ) ; のように記述したものをwhile内でループさせるときに、約1000フレームくらい経過すると文字の描画がされなくなりました。 二回目のChangeFontTypeをコメントアウトすると同様の現象は起こらなくなりました。バグの可能性があるのでご報告させていただきます。

Page: 1 |

Re: ChangeFontTypeのバグ? ( No.1 )
名前:sy(サイ) 日時:2011/11/24 11:54

よく覚えてませんが、フォント関連の関数はとても動作が重いです。 この関数の中でフォント作りなおしてる可能性もあるかもしれません。 CreateFontToHandleとDrawStringToHandleを使えば、 使用メモリは増えるかもしれませんが、リアルタイムで行けると思います。 作成した時に使うフォントファイル分のメモリが増えた気がします。
Re: ChangeFontTypeのバグ? ( No.2 )
名前:管理人 日時:2011/11/27 21:28

載せて下さったプログラムを使ってテストプログラムを作ってみました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int LoopNum ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ(何かキーが押されたらループを抜ける) LoopNum = 0 ; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; LoopNum ++ ; ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE ); SetFontSize( 38 ) ; DrawString( 100 , 100 , "DXライブラリ" , GetColor( 255,255,255 ) ) ; ChangeFontType( DX_FONTTYPE_ANTIALIASING ) ; SetFontSize( 16 ) ; DrawString( 0 , 50 , "テスト" , GetColor( 255,255,255 ) ) ; DrawFormatString( 0, 0, GetColor( 255, 255, 255 ), "LoopNum:%d", LoopNum ) ; ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } 起動したまま少し放っておいて23万回くらいループするまで見てみたのですが、 特に描画されなくなるということはありませんでした よろしければ無名さんの環境でも正常に動作するか試してみていただけないでしょうか? あと、無名さんがお使いのDXライブラリのバージョンにはバグがあって、 私の手元の最新バージョンではそのバグが直っている、という可能性もありますので もし上記のテストプログラムでも同様の現象が発生しましたら、 よろしければこちらのバージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: ChangeFontTypeのバグ? ( No.3 )
名前:アリ 日時:2011/11/28 05:56

横からすいません実は私のところでも似た様なバグが発生していました クラスのコンストラクタでそのメンバ変数にCreateFontToHandleのハンドルを入れていたのですが 何度かクラスの作成→破棄を繰り返すといつしかCreateFontToHandleの返り値が-1になり DrawStringToHandleで文字の表記がされなくなりました(DrawStringは普通に文字が出る) 何かの参考になるかはわかりませんが・・・
Re: ChangeFontTypeのバグ? ( No.4 )
名前:管理人 日時:2011/12/04 03:54

CreateFontToHandle で作成したハンドルは要らなくなった際に DeleteFontToHandle で削除する必要があるのですが、 クラスを破棄する際に DeleteFontToHandle で CreateFontToHandle で作成したハンドルを削除する、という処理は 入っていますでしょうか? 仮にその処理が入っていないとしますと、フォントハンドルの最大数 40 に達した時点で CreateFontToHandle は -1 を返すようになります

Page: 1 |