灵通163百科在线-实用的手机,证券免费资源网站

您现在的位置:首页 > 手机图文教程 > WM智能教程 >

SDL游戏开发教程02(显示图片)

教程来源:www.lt163.com     点击数:     更新时间:2018-01-08 00:09

    本节将介绍如何创建一个窗口并在上面贴一副图片,效果如下:


 

    显示图片是2D游戏开发的基础,游戏开发的大部分工作是在处理用户的输入,然后调整显示在界面上的图片。这个例子就是完成最基本的功能:显示图片。由于没有消息循环和事件响应,窗口不能移动,只能用任务管理器关闭。

 

    代码如下

#include "SDL/SDL.h" #include <string> const int SCREEN_WIDTH = 800; const int SCREEN_HEIGHT = 600; const int SCREEN_BPP = 32; //从硬盘中加载一张图片 SDL_Surface *load_image( std::string filename ) { SDL_Surface* loadedImage = NULL; SDL_Surface* optimizedImage = NULL; //加载硬盘中的图片,SDL_LoadBMP函数只支持BMP格式图片 loadedImage = SDL_LoadBMP( filename.c_str() ); //如果图片加载成功 if( loadedImage != NULL ) { //根据当前程序的设置,将图片信息转换成适合程序使用的格式,转换后会得到一张新图片 //比如说程序里面用的是32位色,而图片本来是16位色,则需要将图片转换成32位色后才能在窗口中正常显示 optimizedImage = SDL_DisplayFormat( loadedImage ); //释放刚刚从硬盘加载的图片,加载的图片一定要注意释放,否则会造成内存泄漏 SDL_FreeSurface( loadedImage ); } return optimizedImage; } //将源图片粘贴到目的图片上,即将内存中的一块区域覆盖到另一块区域上 void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination ) { //源图片将要粘贴的位置,这个位置指目的区域上的位置 //SDL的坐标原点在左上角,向右为X正方向,向下为Y正方向 SDL_Rect offset; offset.x = x; offset.y = y; //第二个参数表示将源图片的哪部分粘贴过去,如果为NULL,表示全部 //如果部分粘贴,则在第二个参数中指明取源图片的哪部分 SDL_BlitSurface( source, NULL, destination, &offset); } int main( int argc, char* args[] ) { SDL_Surface *message = NULL; SDL_Surface *screen = NULL; /** * 初始化SDL环境,具体参数见SDL文档,这里初始化所有环境 * 初始化所有环境的好处是开始时所有的环境都帮你初始化好,后面就不用担心相应的环境是否被初始化 * 但缺点是有些SDL的功能你可能用不着,在这里把他初始化后会造成资源浪费 * 由于是学习,所以为了方便,初始化所有环境 */ if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) { return 1; } /**设置程序窗口属性,该函数会根据传入的参数创建窗口,返回一个screen * screen可以看成和窗口对应的一块内存区域,程序在这块内存区域中粘贴图片,做变换 * 最后再将这块区域的数据贴到屏幕上去,这样就得到了游戏中的一幅画面,即一帧 * SCREEN_WIDTH 窗口宽 * SCREEN_HEIGHT 窗口高 * SCREEN_BPP 存储一个像素用的位数,就是我们平时配置显示器时的"颜色质量",这里用32位 * SDL_SWSURFACE 该参数可以配置是否全屏、窗口内容存储位置之类的东西,详细信息见SDL文档,这里设置为非全屏且窗口内容存储在内存中 */ screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE ); if( screen == NULL ) { return 1; } //设置窗口标题和图标,这里暂时不设置图标 SDL_WM_SetCaption( "Hello World", NULL ); //加载要显示的图片,这里可以换成你想要显示的任何图片,不过只能是BMP格式的 message = load_image( "E:\\code_picture\\javaeye.bmp" ); //将要显示的图片粘贴到screen上的左上角去 apply_surface( 0, 0, message, screen ); //上面在screen上做的所有操作都是在内存中进行,下面是将screen内存中的内容贴到屏幕窗口中 if( SDL_Flip( screen ) == -1 ) { return 1; } //等待两秒,免得main函数马上运行完并退出,造成什么都看不到,你可以根据实际情况适当延长时间 SDL_Delay( 2000 ); //释放加载的图片 SDL_FreeSurface( message ); //释放窗口 SDL_FreeSurface( screen ); //退出SDL环境 SDL_Quit(); return 0; }

    

    上面的代码主要参考 ,只对其中的部分代码做了小小调整,如果看上面的注释没办法明白什么意思的话,可以参考这个链接里面的介绍。


     如果你选择的图片大于窗口大小的话,将显示部分图片;如果选择的图片小于窗口大小的话,图片没有覆盖到的部分将显示黑色,这是因为screen被创建后默认是黑色。在后面的教程中,将会介绍到图片的缩放,由于图片缩放会造成图片的失真,所以尽量不要使用该功能。

没有相关教程
UC浏览器 最先进实用的手机端浏览器,最大限度节省页面浏览流量,点击下载
老虎地图 绿色纯免费GPS定位省流量的最佳手机地图,点击下载
网秦手机安全系列 手机杀毒防盗,防火墙,构建手机安全,点击进入
塞班精品游戏 最流行最给力的塞班S60免签名名精品游戏合集,点击进入
阿里通 手机上轻松拨打网络电话和收发短信,高音质超省话费,资费标准
爱科手机电话 国内最好的手机网络电话领先品牌,价格低廉,点击查看
愤怒的小鸟2 全民挑战超流行休闲游戏力推新作-愤怒的小鸟2,点击查看
魔力旺旺 淘宝卖家首选的交易工具

资源下载排行
文章阅读排行