Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1427324
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类: LINUX

2006-05-26 11:11:31

SDL系列教程之(五):扩展函数库的使用

作者:akinggw

朋友们,大家早上好!

经过这两天的观察,我发现我们的SDL系列文章受到了很大的关注,在此,我要在这里对所有关心我们栏目的朋友表示感谢,如果你有什么好的建议或想法,请来信告诉我。 .

在上一节内容中,我们讲解了如何在屏幕上显示位图格式的图象。但现在的游戏中并不使用位图。这是因为它有一个致命的缺点,那就是体积过大。

如果我们将一幅图象转化成bmpjpg两种格式,你会发现他们的体积差别是那么的大,bmp文件的体积可能是jpg文件的几十倍。

文件过大就为我们带来了一个问题,当我们做一个游戏时,可能有成千上万张图片,如果全部为BMP格式。一个很小的游戏可能也需要几张光盘来存储,显然这是不实际的。而采用压缩格式,我们可能只需要一张光盘就可以了。

当然JPG文件也有它的一个缺点,那就是图象由于压缩的关系,可能会出现图象失真。但这在游戏中是可能忽视不计。

好,下面我们就来讲解如何显示JPG等压缩图象。

首先,我们需要下载一个扩展函数库,你可以到下面的地址下载:

http://www.libsdl.org/projects/SDL_image/

解压后,文件包含3个部分:头文件,静态库文件和动态库文件。

 

将它的头文件拷贝到VCSDL头文件下,SDL的路径大概为:C:Program FilesMicrosoft Visual StudioVC98IncludeSDL.

然后将静态库文件(.lib)拷贝到VCLIB目录下,LIB的路径大概为:C:Program FilesMicrosoft Visual StudioVC98Lib.

最后将动态库文件(.dll)全部拷贝到系统目录下,系统目录大概为:C:WINDOWSSYSTEM32.

新建一个SDL项目,打开“Project->Settings

在“link表下的Object/library modules中粘贴:

SDL_image.lib

 

注意SDL_image.lib应在SDL.lib ,SDLmain.lib的后面。

 

设置到这里就基本完成。

 

打开我们前面的项目,在源代码文件中添加下面头文件:

#include "SDL/SDL_image.h"

 

修改我们的导入位图函数:

 

/* 导入图象*/

SDL_Surface *load_image( char *filename )

{

    //将图象暂时存储在这里

    SDL_Surface* loadedImage = NULL;

   

    //存储最佳的图象

    SDL_Surface* optimizedImage = NULL;

 //导入图象

    loadedImage = IMG_Load ( filename );

//如果导入图象不为空

    if( loadedImage != NULL )

    {

        //建立最佳的图象

        optimizedImage = SDL_DisplayFormat( loadedImage );

       

        //释放老的图象

        SDL_FreeSurface( loadedImage );

    }

//返回最佳的图象

    return optimizedImage;

}

将函数中的SDL_LoadBMP函数改为IMG_Load函数。

它是扩展库中的一个导入图象的函数,支持的图象格式有BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA 和PNG。

 

其它的代码不用改动,最后,你可以显示一幅JPG图象试试。

我得到的图象显示结果如下:

 

关于更多内容请访问金桥科普网站(  )游戏开发栏目,如果你需要游戏开发方面的书籍请参考金桥书城游戏频道( )。 如果你在阅读本篇文章时有什么好的建议请来信给我,我的E_mail: akinggw@126.com. 如果你在使用SDL时有什么问题,请到金桥科普网站(  )游戏开发栏目,我将详细地为你解答。

 

下一章中,我们将讲解如何处理键盘事件。

阅读(1906) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~