C++&SDL游戏开发攻略 3 - 读取图片

如题所述

第三章 读取图片

在上一章我们绘制了一个纯色长方形,虽然这足以制作一些基础游戏,但引入现成或自创的图片资源可以实现更丰富的画面。本章将介绍如何在 C++ 使用 SDL 库读取图片资源并绘制。

使用图片资源对于游戏开发至关重要,就像走出新手村面对史莱姆一样,它标志着游戏设计的初步升级。为了高效地读取和利用图片资源,我们需要引入 SDL_image 库,它能处理多种图片格式,包括 PNG 和 JPEG。

一、准备活动(SDL_image 库)

为了高效地读取图片,避免频繁读取导致的性能损耗,我们需要将图片数据存储在内存中,以便循环使用。SDL_image 库提供了读取和处理图片的功能,简化了这一过程。首先,确保下载并正确配置 SDL_image 库。访问以下链接获取库文件:

libsdl.org/projects/SDL...

处理 PNG 或 JPEG 需要额外的文件 libpng16-16.dll 和 libjpeg-9.dll,确保将这些文件复制到项目文件夹的指定位置。如在序章中介绍的,环境配置出现问题时,通过检查 include SDL_image.h 是否出现错误提示,或参考最后的 GitHub 链接下载预配置工程,可以解决配置问题。

配置完成后,初始化 SDL_image 库,并在程序结束时释放资源以避免内存泄漏。

二、读取图片

为了实现循环使用图片,我们为 Game 类添加一个 SDL_Texture* 类成员变量 mTexture。接下来,实装读取图片的 LoadTexture() 函数,代码如下:

首先确保 mTexture 未被占用,释放内存空间,防止内存泄漏。
使用 SDL_image 库的 IMG_Load() 函数读取图片,并将其存储为 SDL_Surface 类型。
将读取到的 SDL_Surface 类型转换为 SDL_Texture 类型,以适应硬件优化,提高处理效率。
释放已读取的 SDL_Surface 变量,避免资源浪费。
将读取到的贴图赋值给 mTexture 成员变量。
在 Initialize() 函数中调用 LoadTexture() 函数加载图片。

三、绘制图片

完成图片读取后,接下来在 Draw() 函数中将图片输出到屏幕上。关键函数 SDL_RenderCopy() 的参数解释如下:

前两个参数是渲染器和要输出的贴图。
后两个参数为 SDL_Rect 类型,用于指定输出位置和裁剪区域。

定义变量并获取 SDL_Texture 的宽度和高度,通过 SDL_QueryTexture() 函数。创建 SDL_Rect 变量,用于指定截取区域和输出位置。最后,通过调用 SDL_RenderCopy() 函数实现图片的绘制。

完成图片读取和绘制后,程序可以运行起来。如需优化性能,可在 Update() 函数中让计算机休息 10 毫秒,防止 CPU 和 GPU 过度运算。完整工程可参考链接。
温馨提示:内容为网友见解,仅供参考
无其他回答

C++&SDL游戏开发攻略 3 - 读取图片
一、准备活动(SDL_image 库)为了高效地读取图片,避免频繁读取导致的性能损耗,我们需要将图片数据存储在内存中,以便循环使用。SDL_image 库提供了读取和处理图片的功能,简化了这一过程。首先,确保下载并正确配置 SDL_image 库。访问以下链接获取库文件:libsdl.org\/projects\/SDL...处理 PNG 或 JPEG...

关于游戏开发时的图片显示问题,谢谢各位啦
最方便是通过像素来找显示的部分,像零件地图一样。角色也是通过这种方式来存入不同方向的移动状态的。目前大部分的C++游戏,尤其是RPG都是通过这种方式实现的,减少复杂度和存储空间。但是我只知道原理,因为当时做大作业的时候时间很紧,最后没做完也没有深究。我这里保留了很多关于游戏设计的资料和高人的...

SDL开发笔记(一):SDL介绍、编译使用以及工程模板
步骤一:解压文件夹 步骤二:使用CMake配置项目 配置路径,勾选配置相关的选项,然后点击配置:配置生成工程的编译器类型和具体的编译器,如下图:选择Qt5.9.3,mingw32的c和c++编译器,如下图:生成工程,如下图:配置成功,然后“Generate”生成工程,如下图:修改一下安装路径,方便提取模块化,再...

开发游戏需要掌握什么语言和技术
语言一般是C\/C++ &Lua&(OpenGL+SDL)\/DirectX就可以以开发了,无论是PC还是Xbox都可以的,只是需要的SDK不同。PS3\/4就不太清楚,毕竟这个平台是索尼开发的。还有一种方式是用游戏引擎,Unity3D可以开发PC-xBox,安卓,WP好像PS也行。使用的脚步语言是C# 或者JavaScript,还有一种是……忘了。至于技术...

2024年 C++音视频开发学习路线(ffmpeg\/rtsp\/srs\/webrtc\/hls)
音视频工作领域繁复多样,自学时易陷入迷茫。本文整理出九个前景不错的方向:直播、传输、算法、视频播放器、流媒体后端、短视频、音频播放、视频编辑、图像处理。以下为详细学习路线:音视频基础 音频基础知识视频基础知识解复用基础知识FFmpeg开发环境搭建音视频开发常用工具FFmpeg实战教程 FFmpeg命令SDL跨平台...

怎么自己开发游戏软件?
1、开发游戏软件之前要学会至少一门语言,c\/c++也好、java也好、js也好。2、你要做什么类型的游戏,动作、角色还是什么,以及你要做2d游戏、还是3d游戏。3、学习图形接口方面的东西sdl、opengl、dx等,里面的案例会让你学到很多游戏方面的知识,让你懂得怎么用代码控制图形显示。4、其实现在做游戏的朋友...

如何制作自己的C++游戏引擎
选择编程语言、实现硬件访问、创建游戏循环、处理输入、内存中表示游戏对象、渲染、物理模拟、UI、脚本、以及音频处理是构建游戏引擎的关键步骤。不同语言和库适用于不同的任务,如C++的性能优势、SDL等库的多平台兼容性,以及现成物理引擎和UI库的可用性。在构建游戏引擎时,设定明确的边界和终点线至关重要...

电脑sdl文件sdl文件双击打不开
1、SDL指的是SDL游戏库:SDL是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台的应用软件。2、SDL指的是软件安全开发周期:SDL即Security Development Lifecycle,是微软提出的从安全角度指导软件...

开发一款游戏需要什么软件 设计游戏的软件有哪些
游戏开发的常用软件有C++、DirectX、Box2D、Cocos2d-x、Unity,不能说哪款最好用,因为这是游戏开发过程中都要用到的软件,必须都精通。C++是在C语言的基础上开发的一种通用编程语言,应用广泛。DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。Box2D是一个用于模拟2D刚体物体的...

用dev c++配置SDL时的问题
工程属性-> 文件\/目录 -> 库目录,添加 libSDL.a所在的路径 工程属性-> 参数 -> 链接器,添加参数 -lmingw32 -lSDLmain -lSDL -mwindows 拷贝SDL.dll到项目生成的exe路径下。

相似回答
大家正在搜