曾今一段時間熱心的想學習游戲編程,於是研究起了SDL,第一篇文章《SDL學習筆記一 圖片和字體顯示》是07年7月份寫的,至此之後,就停了下來。
最近的一段時間有熱心起來,拾起以前的代碼,繼續研究!寫《SDL學習筆記一 圖片和字體顯示》一文時,我沒有找到中文的顯示方法,今天參照《SDL & Object Pascal (Delphi) [2] 顯示中文字符》一文,做了個小鬼搬家,也算重新學習的開始吧!
圖片看不清楚?請點擊這裡查看原圖(大圖)。
下面是代碼,同樣使用Delphi7,配合JEDI-SDL:
1program Project1;
2
3uses
4 SysUtils,
5 SDL,
6 SDL_TTF;
7
8var
9 screen:PSDL_Surface;
10 event:TSDL_Event;
11 font: PTTF_Font;
12 outtxt: WideString;
13procedure draw_unicode_text(Word: WideString ; x_pos,y_pos : Integer;
14 color :Cardinal);
15var
16 text : PSDL_Surface;
17 dest : TSDL_Rect;
18 clr : TSDL_color;
19begin
20 clr.r := Color and $FF;
21 clr.g := (Color shr 8) and $FF;
22 clr.b := (Color shr 16) and $FF;
23 // 用到了兩個全局對象screen和font
24 text:= TTF_RenderUNICODE_Blended(font,@Word[1],clr);
25 dest.x:=x_pos;
26 dest.y:=y_pos;
27 SDL_BlitSurface(text,nil,screen,@dest);
28 SDL_FreeSurface(text);
29end;
30begin
31 if SDL_Init(SDL_INIT_VIDEO)< 0 then Exit;
32 if TTF_Init()<0 then Exit;
33 SDL_WM_SetCaption('Delphi SDL Demo',nil);
34 screen:=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
35 if (screen=nil) then
36 begin
37 SDL_Quit;
38 exit;
39 end;
40 font:=TTF_OpenFont('msyh.ttf',24);
41 outtxt:='JEDI-SDL 演示程序';
42 draw_unicode_text(outtxt,220,160,$0000FF);
43 draw_unicode_text('SDL中文輸出測試',220,200,$336699);
44 draw_unicode_text('Code By Shaoyun',220,240,$00FF00);
45 SDL_Flip(screen);
46 while SDL_PollEvent(@event)>=0 do
47 begin
48 case event.type_ of
49 SDL_QUITEV: Break;
50 SDL_KEYDOWN:
51 case event.key.keysym.sym of
52 SDLK_ESCAPE: Break;
53 end;
54 end;
55 end;
56 TTF_CloseFont(font);
57 TTF_Quit;
58 SDL_Quit;
59 exit;
60end.