本节将介绍如何创建一个窗口并在上面贴一副图片,效果如下:
显示图片是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;
}
上面的代码主要参考http://lazyfoo.net/SDL_tutorials/index.php
,只对其中的部分代码做了小小调整,如果看上面的注释没办法明白什么意思的话,可以参考这个链接里面的介绍。
如果你选择的图片大于窗口大小的话,将显示部分图片;如果选择的图片小于窗口大小的话,图片没有覆盖到的部分将显示黑色,这是因为screen被创建后默认是黑色。在后面的教程中,将会介绍到图片的缩放,由于图片缩放会造成图片的失真,所以尽量不要使用该功能。
- 大小: 104.2 KB
分享到:
相关推荐
在本教程中,我们将深入探讨如何使用SDL库在游戏开发中...通过这个教程,你应该能够熟练地在SDL游戏中显示图片和文字,为你的项目增添更多的视觉元素和交互性。不断实践和优化,你将能够创建出更加丰富多样的游戏世界。
【标题】 SDL游戏开发教程11(扫雷游戏实现) 在本教程中,我们将探讨如何使用Simple DirectMedia Layer (SDL)库来实现经典的扫雷游戏。SDL是一个跨平台的开发库,专门用于处理图形、音频和输入设备,是游戏开发中...
通过学习"SDL.rar_SDL知名游戏_sdl教程_sdl游戏"提供的资料,尤其是"SDL教程.docx"文档,你将逐步掌握SDL的基本用法,为开发自己的游戏奠定坚实的基础。随着对SDL的熟练运用,你甚至可以参与制作出具有专业水准的...
- **书籍**:《Beginning Game Programming with SDL 2.0》等书籍深入介绍了SDL2.0的游戏开发。 **六、实践项目** 1. **基本窗口**:创建并显示一个简单的窗口,熟悉窗口管理和事件处理。 2. **动画**:利用帧率...
在这个“SDL开发教程”中,我们将深入探讨SDL的关键特性、安装过程、基本用法以及如何利用它来创建简单的应用程序。 首先,让我们从安装SDL开始。在不同的操作系统上,安装SDL的方法略有不同。在Windows上,你可以...
教程内容:PDF文档 1.输出图片 2,块传输 3,事件控制 4,设置色键 5,裁剪精灵 6,定位崩溃 7,显示字体 8,按键操作 9,鼠标操作 10,按键状态 11,播放声音 12,动画制作 13,定时器 14,定时器高级应用 15,调整...
这个压缩包包含了一份关于SDL的详细教程,对于想要学习如何使用SDL进行游戏开发或图形编程的人来说是极好的资源。 **SDL教程内容概览** 1. **入门基础**:首先,你需要了解SDL的基本概念和安装步骤。在不同操作...
本教程将探讨如何使用Simple DirectMedia Layer(SDL)显示图片,并结合OpenGL创建3D地球模型。我们将深入理解这两个库,以及如何利用GLUT库辅助OpenGL进行3D图形的绘制。 SDL是一个跨平台的多媒体库,它提供了丰富...
**SDL(Simple DirectMedia Layer)** 是一个跨平台的开源开发库,主要用于处理图形、音频、输入设备等多媒体任务,尤其适用于游戏开发和多媒体应用程序。它提供了一个抽象层,使得开发者可以编写一次代码,然后在...
SDL是一个跨平台的开发库,主要用于处理多媒体元素,如图形、音频和输入设备控制,尤其在游戏开发领域应用广泛。本软件提供了对图片的简单操作功能,用户可以方便地浏览和管理个人的图像集合。 在描述中提到的...
【SDL 显示中文 例程】是一个针对嵌入式游戏设计者解决中文显示问题的教程。在游戏开发中,尤其是在跨平台的情况下,正确地显示非ASCII字符,如中文汉字,可能会遇到很多挑战。SDL(Simple DirectMedia Layer)是一...
标题中的"SDL SDK + SDL Image"表明我们正在讨论的是用于游戏开发和图形处理的Simple DirectMedia Layer (SDL) 库的软件开发工具包(SDK),以及它的图像扩展库——SDL Image。SDL是一个跨平台的多媒体库,而SDL Image...
它以其简洁的API和高效的性能在游戏开发领域广受欢迎。 本套官方中文资料深入浅出地介绍了SDL的使用方法,帮助开发者快速理解和掌握SDL的核心功能。以下将对主要知识点进行详细阐述: 1. **SDL初始化与窗口创建** ...
在处理图形显示方面,SDL不仅可以加载和显示图片,还能够进行简单的图形绘制,如绘制几何图形、线条和矩形,以及分形图案等。它也支持多文件的代码组织,可以在一个项目中清晰地管理代码结构。 此外,SDL也支持基本...
在游戏开发、图形用户界面构建等领域,SDL被广泛使用。"SDL中文学习手册(全)"提供了全面的学习资源,帮助开发者深入理解和掌握SDL库的使用。 1. **SDL基础** SDL的基础部分包括初始化、窗口管理、渲染系统。学习...
SDL(Simple DirectMedia Layer)是一个广泛使用的开源库,主要用于游戏开发、多媒体应用和其他图形用户界面的创建。它为开发者提供了在多个操作系统平台上,如Windows、Linux、Mac OS X和Android等,进行低级别的...
许多教程和示例代码可以帮助初学者快速上手,例如通过创建一个简单的窗口或显示图片开始。随着对SDL的深入理解,你可以逐步实现更复杂的功能,如动画、碰撞检测和物理模拟。 总的来说,SDL_Download涉及的是获取和...
### SDL游戏开发基础知识点 #### 1. SDL简介与安装配置 - **SDL** (Simple DirectMedia Layer) 是一个跨平台的2D图形库,用于游戏开发和其他多媒体应用的开发。它提供了简单高效的接口,让开发者能够轻松地绘制图像...
SDL(Simple DirectMedia Layer)是一个开源的跨平台开发库,主要用于多媒体应用、游戏开发和其他实时图形需求的软件。它提供了一个简洁的API接口,使得开发者能够轻松地处理窗口管理、输入设备、音频播放以及图像...