这篇文章最早写于07年,我的cppblog里,现在转过来,地址:http://www.cppblog.com/shaoyun/archive/2007/07/28/28876.html

偶然得知SDL这个游戏库,赶忙迫不及待的学习了一下,正好最近在学习DELPHI,于是下了DELPHI版的。可以在http://www.libsdl.org  http://www.delphi-jedi.org/这两个站点了解到相关的信息。

SDL库设计的十分的简洁,非常容易使用。我的代码实例,实现了BMP、PNG、JPG三种图片格式的加载显示,并加入了TTF字体的显示,都是库使用的例子,代码不难,发出来共享。以下是截图:
SDL学习笔记一 图片和字体显示

下面是代码:

  1SDL学习笔记一 图片和字体显示//Program: A simple delphi sdl demo
  2SDL学习笔记一 图片和字体显示//Author: shaoyun
  3SDL学习笔记一 图片和字体显示//Mail: shaoyun at yeah.net (please use '@' instead of 'at')
  4SDL学习笔记一 图片和字体显示program SDLDemo;
  5SDL学习笔记一 图片和字体显示uses SysUtils, Windows, SDL, SDL_Image, SDL_TTF;
  6SDL学习笔记一 图片和字体显示var
  7SDL学习笔记一 图片和字体显示    screen: PSDL_Surface;
  8SDL学习笔记一 图片和字体显示    event: TSDL_Event;
  9SDL学习笔记一 图片和字体显示    isOver: boolean = false;
 10SDL学习笔记一 图片和字体显示
 11SDL学习笔记一 图片和字体显示//*******************定义显示位图的函数draw_bmp()*************************
 12SDL学习笔记一 图片和字体显示//BMP格式的图片通常都上MB了,谁会用这种格式做游戏
 13SDL学习笔记一 图片和字体显示
 14SDL学习笔记一 图片和字体显示procedure draw_bmp(surface: PSDL_Surface; img_path: PChar; x_pos: integer; y_pos: integer);
 15SDL学习笔记一 图片和字体显示var
 16SDL学习笔记一 图片和字体显示    image: PSDL_Surface;
 17SDL学习笔记一 图片和字体显示    dest: TSDL_Rect;
 18SDL学习笔记一 图片和字体显示begin
 19SDL学习笔记一 图片和字体显示    image := SDL_LoadBMP(img_path);
 20SDL学习笔记一 图片和字体显示    if (image = nilthen
 21SDL学习笔记一 图片和字体显示    begin
 22SDL学习笔记一 图片和字体显示    MessageBox(0, PChar(Format(' Error:%s! ' #9, [SDL_GetError])), ' Error ', MB_OK or MB_ICONHAND);
 23SDL学习笔记一 图片和字体显示    exit;
 24SDL学习笔记一 图片和字体显示    end;
 25SDL学习笔记一 图片和字体显示    if (image.format.palette <> nilthen
 26SDL学习笔记一 图片和字体显示    begin
 27SDL学习笔记一 图片和字体显示        SDL_SetColors(surface, @image.format.palette.colors[0], 0,image.format.palette.ncolors);
 28SDL学习笔记一 图片和字体显示    end;
 29SDL学习笔记一 图片和字体显示    dest.x := x_pos;
 30SDL学习笔记一 图片和字体显示    dest.y := y_pos;
 31SDL学习笔记一 图片和字体显示    dest.w := 0;
 32SDL学习笔记一 图片和字体显示    dest.h := 0;
 33SDL学习笔记一 图片和字体显示    if (SDL_BlitSurface(image, nil, surface, @dest) < 0then
 34SDL学习笔记一 图片和字体显示    MessageBox(0, PChar(Format(' BlitSurface error : %s ', [SDL_GetError])),' Error ', MB_OK or MB_ICONHAND);
 35SDL学习笔记一 图片和字体显示    SDL_UpdateRect(surface, 00, image.w, image.h);
 36SDL学习笔记一 图片和字体显示    SDL_FreeSurface(image);
 37SDL学习笔记一 图片和字体显示end;
 38SDL学习笔记一 图片和字体显示
 39SDL学习笔记一 图片和字体显示//*******************定义显示图片的函数draw_img()*************************
 40SDL学习笔记一 图片和字体显示//这个函数的调用须有SDL_Image.dll、jpeg.dll、libpng1.dll的支持 ,可以显示bmp、jpg、png三种格式
 41SDL学习笔记一 图片和字体显示//文档指明显示png格式需要zlib.dll和libpng1.dll
 42SDL学习笔记一 图片和字体显示
 43SDL学习笔记一 图片和字体显示procedure draw_img(surface: PSDL_Surface; img_path: PChar; x_pos: integer; y_pos: integer);
 44SDL学习笔记一 图片和字体显示var
 45SDL学习笔记一 图片和字体显示    image: PSDL_Surface;
 46SDL学习笔记一 图片和字体显示    dest: TSDL_Rect;
 47SDL学习笔记一 图片和字体显示
 48SDL学习笔记一 图片和字体显示begin
 49SDL学习笔记一 图片和字体显示    image := IMG_Load(img_path);
 50SDL学习笔记一 图片和字体显示    if image = nil then
 51SDL学习笔记一 图片和字体显示    begin
 52SDL学习笔记一 图片和字体显示    MessageBox(0, PChar(Format(' Error:%s! ' #9, [SDL_GetError])), ' Error ', MB_OK or MB_ICONHAND);
 53SDL学习笔记一 图片和字体显示    exit;
 54SDL学习笔记一 图片和字体显示    end;
 55SDL学习笔记一 图片和字体显示    dest.x := x_pos;
 56SDL学习笔记一 图片和字体显示    dest.y := y_pos;
 57SDL学习笔记一 图片和字体显示    dest.w := 0;
 58SDL学习笔记一 图片和字体显示    dest.h := 0;
 59SDL学习笔记一 图片和字体显示    SDL_BlitSurface(image, nil, surface, @Dest);
 60SDL学习笔记一 图片和字体显示    SDL_FreeSurface(image);
 61SDL学习笔记一 图片和字体显示end;
 62SDL学习笔记一 图片和字体显示//*******************定义显示TTF字体的函数draw_text()*************************
 63SDL学习笔记一 图片和字体显示//不能显示中文,不过网上有人实现了中文的显示
 64SDL学习笔记一 图片和字体显示
 65SDL学习笔记一 图片和字体显示procedure draw_text(surface: PSDL_Surface; words: PChar; x_pos: integer; y_pos: integer);
 66SDL学习笔记一 图片和字体显示var
 67SDL学习笔记一 图片和字体显示    text: PSDL_Surface;
 68SDL学习笔记一 图片和字体显示    font: PTTF_Font;
 69SDL学习笔记一 图片和字体显示    dest: TSDL_Rect;
 70SDL学习笔记一 图片和字体显示    textColor: TSDL_Color;
 71SDL学习笔记一 图片和字体显示begin
 72SDL学习笔记一 图片和字体显示    textcolor.r := $00;
 73SDL学习笔记一 图片和字体显示    textcolor.g := $FF;
 74SDL学习笔记一 图片和字体显示    textcolor.b := $00;
 75SDL学习笔记一 图片和字体显示    textcolor.unused := 0;
 76SDL学习笔记一 图片和字体显示    font := TTF_OpenFont(' simhei.ttf '20);
 77SDL学习笔记一 图片和字体显示    if font = nil then
 78SDL学习笔记一 图片和字体显示    begin
 79SDL学习笔记一 图片和字体显示        MessageBox(0, PChar(Format(' Error:%s! ' #9, [SDL_GetError])), ' Error ',MB_OK or MB_ICONHAND);
 80SDL学习笔记一 图片和字体显示    exit;
 81SDL学习笔记一 图片和字体显示    end;
 82SDL学习笔记一 图片和字体显示    text := TTF_RenderText_Blended(font, words, textColor);
 83SDL学习笔记一 图片和字体显示    dest.x := x_pos;
 84SDL学习笔记一 图片和字体显示    dest.y := y_pos;
 85SDL学习笔记一 图片和字体显示    SDL_BlitSurface(text, nil, surface, @Dest);
 86SDL学习笔记一 图片和字体显示    SDL_Flip(screen);
 87SDL学习笔记一 图片和字体显示    SDL_FreeSurface(text);
 88SDL学习笔记一 图片和字体显示    TTF_CloseFont(font);
 89SDL学习笔记一 图片和字体显示end;
 90SDL学习笔记一 图片和字体显示//*****************************Main***************************
 91SDL学习笔记一 图片和字体显示// begin
 92SDL学习笔记一 图片和字体显示if (SDL_Init(SDL_INIT_VIDEO) < 0then exit;
 93SDL学习笔记一 图片和字体显示SDL_WM_SetCaption(' Delphi SDL Simple Demo 'nil);
 94SDL学习笔记一 图片和字体显示screen := SDL_SetVideoMode(64048032, SDL_SWSURFACE); //设置分辨率
 95SDL学习笔记一 图片和字体显示if (screen = nilthen
 96SDL学习笔记一 图片和字体显示begin
 97SDL学习笔记一 图片和字体显示    SDL_Quit;
 98SDL学习笔记一 图片和字体显示    exit;
 99SDL学习笔记一 图片和字体显示end;
100SDL学习笔记一 图片和字体显示//draw_bmp(screen,'bg.bmp',0,0);
101SDL学习笔记一 图片和字体显示draw_img(screen, ' bg.jpg '00);
102SDL学习笔记一 图片和字体显示//TTF初始化
103SDL学习笔记一 图片和字体显示if TTF_Init() < 0 then
104SDL学习笔记一 图片和字体显示begin
105SDL学习笔记一 图片和字体显示    MessageBox(0, PChar(Format(' Error:%s! ' #9, [SDL_GetError])), ' Error ', MB_OK or MB_ICONHAND);
106SDL学习笔记一 图片和字体显示    exit;
107SDL学习笔记一 图片和字体显示end;
108SDL学习笔记一 图片和字体显示draw_text(screen, ' A Delphi SDL Simple Demo '3030);
109SDL学习笔记一 图片和字体显示draw_text(screen, ' By shaoyun '380400);
110SDL学习笔记一 图片和字体显示draw_text(screen, ' E-mail: shaoyun@yeah.net '380430);
111SDL学习笔记一 图片和字体显示//销毁TTF
112SDL学习笔记一 图片和字体显示TTF_Quit();
113SDL学习笔记一 图片和字体显示while not isOver do
114SDL学习笔记一 图片和字体显示begin
115SDL学习笔记一 图片和字体显示    while (SDL_PollEvent(@event) <> 0do      //处理键盘按键
116SDL学习笔记一 图片和字体显示    begin
117SDL学习笔记一 图片和字体显示    case of
118SDL学习笔记一 图片和字体显示      SDL_QUITEV:
119SDL学习笔记一 图片和字体显示        isOver := true;
120SDL学习笔记一 图片和字体显示      SDL_KEYDOWN:
121SDL学习笔记一 图片和字体显示        begin
122SDL学习笔记一 图片和字体显示          case event.key.keysym.sym of
123SDL学习笔记一 图片和字体显示            SDLK_ESCAPE: isOver := True;
124SDL学习笔记一 图片和字体显示          end;
125SDL学习笔记一 图片和字体显示        end;
126SDL学习笔记一 图片和字体显示    end;
127SDL学习笔记一 图片和字体显示    end;
128SDL学习笔记一 图片和字体显示end;
129SDL学习笔记一 图片和字体显示SDL_Quit;
130SDL学习笔记一 图片和字体显示end.

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-18
  • 2021-09-22
  • 2022-12-23
  • 2021-04-21
猜你喜欢
  • 2022-12-23
  • 2021-12-08
  • 2022-01-16
  • 2021-08-16
  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案