SDL_TTF その3
前回に引き続き、今回もSDL_TTFを改良したプログラムを掲載します。
ゲームなどで使いやすいように、
ライブラリにして公開します。
関数についての細かい説明は、ダウンロードしたフォルダにソースコードが入っておりますので、適当に読んでください。
下のソースコードは、ライブラリ化したlibttfを使って、文字列を描画するサンプルプログラムです。
サンプル画像
ソースコードのダウンロード
SDL_TTFを使う場合の注意点として、文字コードの取り扱いに気をつける必要があります。
VC++のエディターだと、ソースコード内で記述したテキストの文字コードはJISコードになっていたと思います。
SDL_TTFに日本語等の2バイト文字を食わせる場合、文字コードは必ず
UnicodeかUTF-8 にしておく必要があります。
でないと文字化けしてしまいます。
できれば何とかしてSJISの文字コードに対応した形でここに公開したかったが、情報が少ないうえ、かなり時間がかかりそうなので今回は見合わせました...(´・ω・`)
libttf.h
/**************************************** 概要:TTFフォント読み込み・描画 詳細:SDL_TTFを使用して描画を行う ファイル名:libttf.h *****************************************/ #ifndef FONT_TTF_H #define FONT_TTF_H #include <SDL/SDL.h> #include <SDL/SDL_ttf.h> #include <stdio.h> #include <string.h> #define TTF_MAXSIZE (72) /****************************************/ /* 定数宣言 */ /****************************************/ enum DRAW_STYLE{ /* フォントスタイル*/ DRW_NORMAL = 0, /* 通常 */ DRW_BOLD, /* 太字 */ DRW_ITALIC, /* 斜体 */ DRW_UNDERLINE, /* 下線 */ DRW_NUM, }; typedef enum GRADATION_STYLE{ GRD_DOWN, GRD_RIGHT, GRD_LEFT, GRD_UP, GRD_SLOPE_LEFT, GRD_SLOPE_RIGHT, GRD_MAX, }GRD_STYLE; /****************************************/ /* 色情報構造体 */ /****************************************/ typedef union { /* 文字列最初のフォントカラー */ Uint32 bit32; /*色情報*/ struct { Uint32 b : 8; /*青 */ Uint32 g : 8; /*緑 */ Uint32 r : 8; /*赤 */ Uint32 a : 8; /*透過色*/ } bit8; } TTF_Color; /****************************************/ /* フォント情報構造体 */ /****************************************/ typedef struct ttf_info { int style; /* スタイル */ int interval; GRD_STYLE gstyle; int x; int y; TTF_Color color; TTF_Color gradation; }TTF_Info; /****************************************/ /* 関数宣言 */ /****************************************/ int ttf_init(SDL_Surface *screen,const char *file_path, Uint8 size); void ttf_dest(void); int ttf_remake(const char *file_path, Uint8 size); void ttf_color(Uint32 color); SDL_Rect ttf_put(const char *str,int x,int y); SDL_Rect ttf_put_color(const char *str,int x,int y, Uint32 color); SDL_Rect ttf_put_effect(const char *str,TTF_Info *info); SDL_Rect ttf_put_effect2(const char *str,TTF_Info *info); void ttf_clean(void); #endif /**************************************** end libttf.h *****************************************/ |