`
public0821
  • 浏览: 238045 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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


 

    显示图片是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游戏开发教程05(显示文字和其他格式的图片)

    在本教程中,我们将深入探讨如何使用SDL库在游戏开发中...通过这个教程,你应该能够熟练地在SDL游戏中显示图片和文字,为你的项目增添更多的视觉元素和交互性。不断实践和优化,你将能够创建出更加丰富多样的游戏世界。

    SDL游戏开发教程11(扫雷游戏实现)

    【标题】 SDL游戏开发教程11(扫雷游戏实现) 在本教程中,我们将探讨如何使用Simple DirectMedia Layer (SDL)库来实现经典的扫雷游戏。SDL是一个跨平台的开发库,专门用于处理图形、音频和输入设备,是游戏开发中...

    SDL.rar_SDL知名游戏_sdl教程_sdl游戏

    通过学习"SDL.rar_SDL知名游戏_sdl教程_sdl游戏"提供的资料,尤其是"SDL教程.docx"文档,你将逐步掌握SDL的基本用法,为开发自己的游戏奠定坚实的基础。随着对SDL的熟练运用,你甚至可以参与制作出具有专业水准的...

    SDL2.0教程

    - **书籍**:《Beginning Game Programming with SDL 2.0》等书籍深入介绍了SDL2.0的游戏开发。 **六、实践项目** 1. **基本窗口**:创建并显示一个简单的窗口,熟悉窗口管理和事件处理。 2. **动画**:利用帧率...

    sdl 开发教程

    在这个“SDL开发教程”中,我们将深入探讨SDL的关键特性、安装过程、基本用法以及如何利用它来创建简单的应用程序。 首先,让我们从安装SDL开始。在不同的操作系统上,安装SDL的方法略有不同。在Windows上,你可以...

    SDL游戏入门教程,入门必备教程,初学sdl书籍

    教程内容:PDF文档 1.输出图片 2,块传输 3,事件控制 4,设置色键 5,裁剪精灵 6,定位崩溃 7,显示字体 8,按键操作 9,鼠标操作 10,按键状态 11,播放声音 12,动画制作 13,定时器 14,定时器高级应用 15,调整...

    SDL.rar_sdl_sdlref pdf_sdl中文教程_sdl教程_怎样学sDL画图

    这个压缩包包含了一份关于SDL的详细教程,对于想要学习如何使用SDL进行游戏开发或图形编程的人来说是极好的资源。 **SDL教程内容概览** 1. **入门基础**:首先,你需要了解SDL的基本概念和安装步骤。在不同操作...

    SDL 显示图片和 openGL 3D 地球

    本教程将探讨如何使用Simple DirectMedia Layer(SDL)显示图片,并结合OpenGL创建3D地球模型。我们将深入理解这两个库,以及如何利用GLUT库辅助OpenGL进行3D图形的绘制。 SDL是一个跨平台的多媒体库,它提供了丰富...

    SDL Windows开发库

    **SDL(Simple DirectMedia Layer)** 是一个跨平台的开源开发库,主要用于处理图形、音频、输入设备等多媒体任务,尤其适用于游戏开发和多媒体应用程序。它提供了一个抽象层,使得开发者可以编写一次代码,然后在...

    sdl图片浏览器

    SDL是一个跨平台的开发库,主要用于处理多媒体元素,如图形、音频和输入设备控制,尤其在游戏开发领域应用广泛。本软件提供了对图片的简单操作功能,用户可以方便地浏览和管理个人的图像集合。 在描述中提到的...

    SDL 显示中文 例程

    【SDL 显示中文 例程】是一个针对嵌入式游戏设计者解决中文显示问题的教程。在游戏开发中,尤其是在跨平台的情况下,正确地显示非ASCII字符,如中文汉字,可能会遇到很多挑战。SDL(Simple DirectMedia Layer)是一...

    SDL SDK + SDL Image

    标题中的"SDL SDK + SDL Image"表明我们正在讨论的是用于游戏开发和图形处理的Simple DirectMedia Layer (SDL) 库的软件开发工具包(SDK),以及它的图像扩展库——SDL Image。SDL是一个跨平台的多媒体库,而SDL Image...

    SDL 官方中文资料 介绍SDL用法

    它以其简洁的API和高效的性能在游戏开发领域广受欢迎。 本套官方中文资料深入浅出地介绍了SDL的使用方法,帮助开发者快速理解和掌握SDL的核心功能。以下将对主要知识点进行详细阐述: 1. **SDL初始化与窗口创建** ...

    SDL 图形界面程序设计.pdf

    在处理图形显示方面,SDL不仅可以加载和显示图片,还能够进行简单的图形绘制,如绘制几何图形、线条和矩形,以及分形图案等。它也支持多文件的代码组织,可以在一个项目中清晰地管理代码结构。 此外,SDL也支持基本...

    SDL中文学习手册(全)

    在游戏开发、图形用户界面构建等领域,SDL被广泛使用。"SDL中文学习手册(全)"提供了全面的学习资源,帮助开发者深入理解和掌握SDL库的使用。 1. **SDL基础** SDL的基础部分包括初始化、窗口管理、渲染系统。学习...

    SDL2.0跨平台多媒体开发库

    SDL(Simple DirectMedia Layer)是一个广泛使用的开源库,主要用于游戏开发、多媒体应用和其他图形用户界面的创建。它为开发者提供了在多个操作系统平台上,如Windows、Linux、Mac OS X和Android等,进行低级别的...

    SDL_Download

    许多教程和示例代码可以帮助初学者快速上手,例如通过创建一个简单的窗口或显示图片开始。随着对SDL的深入理解,你可以逐步实现更复杂的功能,如动画、碰撞检测和物理模拟。 总的来说,SDL_Download涉及的是获取和...

    翻译自dev hub的sdl教程1

    ### SDL游戏开发基础知识点 #### 1. SDL简介与安装配置 - **SDL** (Simple DirectMedia Layer) 是一个跨平台的2D图形库,用于游戏开发和其他多媒体应用的开发。它提供了简单高效的接口,让开发者能够轻松地绘制图像...

    SDL_2.rar_SDL库_sdl

    SDL(Simple DirectMedia Layer)是一个开源的跨平台开发库,主要用于多媒体应用、游戏开发和其他实时图形需求的软件。它提供了一个简洁的API接口,使得开发者能够轻松地处理窗口管理、输入设备、音频播放以及图像...

Global site tag (gtag.js) - Google Analytics