ホームへ戻る

 4.3章 フォントを利用して文字を描画する

 以前の章では、文字を描画するにはDrawStringを使いました。しかし、デフォルトフォントは味気なく、安っぽいイメージがします。

しかし、ゲーム内では多様なフォント、そしてアンチエイリアスの効いた綺麗なフォントを使用したいものです。



そこで、画像ハンドルのようにフォントハンドルを作成し、そのハンドルを使ってフォントを描画する機能を使います。

CreateFontHandleという関数でフォントを生成します。CreateFontHandle関数 のリファレンスを確認してみましょう。

宣言 int CreateFontToHandle( char *FontName , int Size , int Thinck , int FontType ) ;

概略 新しいフォントデータを作成

引数 char *FontName : 作成するフォント名( NULL にするとデフォルトのフォント )
int Size : フォントのサイズ( およそドット数 -1:デフォルトのサイズ )
int Thinck : フォントの太さ( 0 ~ 9 -1:デフォルトの太さ )
int FontType : フォントのタイプ
( -1         : デフォルトフォント(DX_FONTTYPE_NORMAL と同じ)
 DX_FONTTYPE_NORMAL      : ノーマルフォント
 DX_FONTTYPE_EDGE       : エッジつきフォント
 DX_FONTTYPE_ANTIALIASING   : アンチエイリアスフォント
 DX_FONTTYPE_ANTIALIASING_EDGE : アンチエイリアス&エッジ付きフォント )
戻り値 戻り値 -1 : 失敗
0以上 : フォントハンドル


引数の説明は上記の通りですが、第一引数に渡す名前はどうやって見つけるのでしょうか。

まず、コントロールパネルのフォントを選択します。



フォント一覧が表示されるので、確認したいフォントをダブルクリックして下さい。そして表示された「フォント名」が



指定する文字列になります。

ワードなどのドキュメント編集ソフトで選択するフォント名から確認してもOKです。



しかし、ゲームを配布する際は、相手のPCにも指定したフォントが同梱されている必要があることに注意して下さい。(無いとデフォルトフォントになります)

特にXPに含まれている日本語フォントは少ないので注意が必要です。

windowsに標準で同梱されているフォントの情報はこの辺を参照して下さい。

「MSゴシック」などであれば大丈夫です。

また、CreateFontHandle関数 に渡す第四引数に「DX_FONTTYPE_ANTIALIASING」を指定すればアンチエイリアスの利いた綺麗なフォントになりますが、

計算量が多くなります。最初の画像のゲーム画面位の文字を全てアンチエイリアスで表示すると、ハイエンドPCでなければ処理落ちします。

この辺のトレードオフは気を付けて行いましょう。

では2パターンで作成したフォントを使ったサンプルをお見せします。


#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更,初期化,裏画面設定

        int Font00, Font01;
        Font00  = CreateFontToHandle( "メイリオ",      70,  3, DX_FONTTYPE_ANTIALIASING_EDGE ) ;//"メイリオ"  の30pt,太さ3のフォントを作成
        Font01  = CreateFontToHandle( "MS ゴシック", 50,  9, DX_FONTTYPE_NORMAL ) ;           //"MSゴシック"の50pt,太さ9のフォントを作成
        
        // while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
        while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() ){

                DrawStringToHandle( 100, 100, "Hello ワールド!", GetColor(255,255,255), Font00 );
                DrawStringToHandle( 100, 300, "Hello ワールド!", GetColor(255,255,255), Font01 );

        }

        DxLib_End();
        return 0;
}

実行結果


上はアンチエイリアスが利いているので、輪郭が綺麗に補間されています。(メイリオはVista以降にしか同梱されていません。御注意下さい)

一方下はアンチエイリアスが利いていないので、輪郭がギザギザしています。

また、太さも指定通り異なっていますね。

今回紹介したCreateFontToHandle関数の仕様は簡単な引数しかありませんでしたが、DXライブラリにはたびたび隠された引数が存在します。

この関数を右クリックして「定義に移動」をしてみて下さい。



すると以下のように書かれています。

CreateFontToHandle( const TCHAR *FontName, int Size, int Thick, int FontType = -1, int CharSet = -1, int EdgeSize = -1, int Italic = FALSE, int DataIndex = -1, int ID = -1 );

イコールが付いている引数は「デフォルト引数」と言って指定しなくても良い引数です。(指定しなければ上記の場合-1となります)

DXライブラリは機能を簡素化するために、たびたび機能が隠してあります。

DXライブラリで「もっと指定出来るオプションは無いのか・・」と思った時は定義を確認してみて下さい。

例えば今確認したCreateFontToHandleで言えば、「EdgeSize」に数を指定することで、縁取りを持ったフォントが作れるようになり、Italicをtrueにすると斜字になるなど、

公開されている使い方以上のことが出来るようになります。

非公開引数ですので、ちゃんとした説明の記載はありませんが、DXライブラリはこのような非公開引数や非公開関数が大量にあります。

余力があれば色んな関数の定義をみてみて下さい。

→分からないことがあれば掲示板で質問して下さい


- Remical Soft -