DrawFormatStringToHandleを使って文字を表示したいのですが、すぐに消えてしまいます。
どこがいけないのでしょうか、プログラムは以下の通りです。
この関数をmain関数で呼び出しています(長いので抜粋しました)
int gpstart(){
count = (count+1)%90;
if( Key[KEY_INPUT_Z] >= 1){
count = 0;
return 1;
}
DrawFormatStringToHandle(50,150,white,letter_m,"タイトル"); //フォントを使って文字を表示しています。←すくに消滅
if(count <= 45) DrawFormatString(230,350,white,"Zキーを押してください"); //点滅させて表示してます。←こっちは正常
return 0;
}
void gpStart(){
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0){
if( gpstart()) break;
}
フォントを利用した文字の表示について
Re: フォントを利用した文字の表示について
お騒がせして申し訳ありません。解決しました。
文字フォントletter_mを
#define letter_m CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL)
のようにdefine文で定義していましたが、
int letter_m = CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL);
のように整数で定義して書き直したら正常に文字が表示されました!
文字フォントletter_mを
#define letter_m CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL)
のようにdefine文で定義していましたが、
int letter_m = CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL);
のように整数で定義して書き直したら正常に文字が表示されました!
Re: フォントを利用した文字の表示について
// 指定がないのでフォントハンドルをグローバル変数に
int letter_m;
// 関数の外でこうやってもできませんがそうやってませんか?
// int letter_m = CreateFontToHandle("メイリオ", 40, 5, DX_FONTTYPE_ANTIALIASING_8X8);
// スタート画面の処理
int gpstart(){
static int count;
// カウントアップ
count = (count+1)%90;
// タイトル表示
DrawFormatStringToHandle(50,150,GetColor(255,255,255),letter_m,"タイトル"); //フォントを使って文字を表示しています。←すくに消滅
// キー入力表示
if(count <= 45) DrawFormatString(230,350,GetColor(255,255,255),"Zキーを押してください"); //点滅させて表示してます。←こっちは正常
// Zキーが入力されたら
if(CheckHitKey(KEY_INPUT_Z)){
// カウントを0に
count = 0;
// スタートボタンの入力を受けた
return 1;
}
// スタートボタンの入力を受けていない
return 0;
}
// メイン関数
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
// ウィンドウモードにする
ChangeWindowMode(true);
// 初期処理
DxLib_Init();
// 描画対象を裏画面にする
SetDrawScreen(DX_SCREEN_BACK);
// フォントの読み込み
letter_m = CreateFontToHandle("メイリオ", 40, 5, DX_FONTTYPE_ANTIALIASING_8X8);
// ループ処理
while(ProcessMessage()==0&&ClearDrawScreen()==0){
// スタートボタンが押されたら終了する
if(gpstart()) break;
// 画面更新
ScreenFlip();
}
// 後処理
DxLib_End();
return 0;
}
どうせだし投稿しちゃいます。
Re: フォントを利用した文字の表示について
文字が表示されていなかった原因をちゃんと理解していますか?milgy さんが書きました:お騒がせして申し訳ありません。解決しました。
文字フォントletter_mを
#define letter_m CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL)
のようにdefine文で定義していましたが、
int letter_m = CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL);
のように整数で定義して書き直したら正常に文字が表示されました!
CreateFontToHandleで作成できるフォントハンドルの数には上限があります。
マクロによってCreateFontToHandleを埋め込むと、毎フレームCreateFontToHandleを呼ぶことになりあっという間に上限に達してしまい、エラーとして無効なハンドルを返すようになります。
DrawFormatStringToHandleに無効なハンドルを渡しても描画されないので、文字が消えたようにみえます。