SDL入門教程(十) 5 SDL完美顯示中文

2021-06-09 07:12:38 字數 2854 閱讀 9566

注意:請使用支援中文的ttf字型檔。

5.1:構建可以正確顯示中文的sdl_ttf函式

世界終於又充滿了光明!任何事情都是有答案的,不知道僅僅是因為我們還沒有找到。解決了以上一系列問題,我們終於可以不依賴mfc,完全使用自由開源的資源,讓sdl顯示中文了!我們通過ttf_renderunicode_***()來構建這些函式:

//filename: font.h

#ifndef font_h_

#define

font_h_

#include 

"gb2312_to_unicode.h

"#include 

"sdl/sdl_ttf.h

"sdl_su***ce

*myttf_renderstring_blended(ttf_font

*font, 

const

std::

string

&str, sdl_color fg);

sdl_su***ce

*myttf_renderstring_solid(ttf_font

*font, 

const

std::

string

&str, sdl_color fg);

sdl_su***ce

*myttf_renderstring_shaded(ttf_font

*font, 

const

std::

string

&str, sdl_color fg, sdl_color bg);

#endif

三種顯示模式的實現檔案:

#include 

"font.h

"sdl_su***ce

*myttf_renderstring_blended(ttf_font

*font, 

const

std::

string

&str, sdl_color fg)

sdl_su***ce

*myttf_renderstring_solid(ttf_font

*font, 

const

std::

string

&str, sdl_color fg)

sdl_su***ce

*myttf_renderstring_shaded(ttf_font

*font, 

const

std::

string

&str, sdl_color fg, sdl_color bg)

5.2:修改displaysu***ce的類方法

其它介面都是不需要改動的,我們僅僅把類方法中,原來用於構建文字面的函式換成我們自己的函式就可以了。當然,先把這些函式#include進來:

#include 

"su***ceclass.h

"#include 

"font.h"//

displaysu***ce::displaysu***ce(

const

std::

string

&msg_name, 

const

std::

string

&message, 

const

screensu***ce

&screen,

uint8 r, uint8 g , uint8 b, 

intttf_size, 

const

std::

string

&ttf_filename):

filename(msg_name)

5.3:stringdata在主程式中的呼叫

最後,我們演示一下stringdata在主程式中的呼叫方法。

//must #include "string_data.h"

//load a textsu***ce

stringdata mydata;

const

std::

string

uinfo 

=mydata[0];

const

std::

string

dinfo 

=mydata[1];

const

std::

string

linfo 

=mydata[2];

const

std::

string

rinfo 

=mydata[3];

const

std::

string

oinfo 

=mydata[4];

textsu***ce upmessage(

"upmsg

", uinfo, screen);

textsu***ce downmessage(

"downmsg

", dinfo, screen, 

0xff, 0

, 0);textsu***ce leftmessage(

"leftmsg

", linfo, screen, 0, 

0xff, 0

);textsu***ce rightmessage(

"rightmsg

", rinfo, screen, 0, 

0, 0xff

);textsu***ce othermessage(

"othermsg

", oinfo, screen, 

100, 

100, 

100, 

35);

SDL入門教程(十三) 2 初識多執行緒

intmain intargc char argv if gameevent.type sdl keydown screen.flip sdl killthread thread1 sdl killthread thread2 return0 void sdl delay uint32 ms 解決r...

SDL入門教程(九) 5 文字反饋滑鼠位置座標資訊

注意事項 1 times.ttf檔案請到c windows fonts下尋找並拷貝到資源目錄下。2 如果您使用vc2008,請用release編譯。原因是,似乎涉及到vector的操作,runtime library在debug的時候必須用multi theaded debug dll mdd 而r...

SDL入門教程(九) 3 文字反饋「按鍵」資訊

3.1 一些小的修改 我覺得寫c 的程式,一是看起來確實比較c 一點,二是相對於c的 精煉 c 要的是 健壯 所以,其實我不太滿意用c風格字串作為screensu ce的成員資料,所以做了修改。這也是為了在程式中構建screensu ce物件的時候可以使用string。class screensu ...