SDL学习笔记二 中文字体的显示
曾今一段时间热心的想学习游戏编程,于是研究起了SDL,第一篇文章《SDL学习笔记一 图片和字体显示》是07年7月份写的,至此之后,就停了下来。
最近的一段时间有热心起来,拾起以前的代码,继续研究!写《SDL学习笔记一 图片和字体显示》一文时,我没有找到中文的显示方法,今天参照《SDL & Object Pascal (Delphi) [2] 显示中文字符》一文,做了个小鬼搬家,也算重新学习的开始吧!
下面是代码,同样使用Delphi7,配合JEDI-SDL:
1
program Project1;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
uses
4
SysUtils,
5
SDL,
6
SDL_TTF;
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
var
9
screen:PSDL_Surface;
10
event:TSDL_Event;
11
font: PTTF_Font;
12
outtxt: WideString;
13
procedure draw_unicode_text(word: WideString ; x_pos,y_pos : Integer;
14
color :Cardinal);
15
var
16
text : PSDL_Surface;
17
dest : TSDL_Rect;
18
clr : TSDL_color;
19
begin
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);
29
end;
30
begin
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;
60
end.
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)