加载并显示图片
今天我们要做的很简单,就是绘制一个好看的背景,然后绘制一个方块在上面,你能使用
键盘来移动方块。
定义三个表面,和一个坐标
SDL_Surface *
back;
SDL_Surface *
image;
SDL_Surface *
screen;
int
xpos=
0
,
ypos=
0
;
然后用下面的函数将图片加载到表面上
int
InitImages()
{
back =
SDL_LoadBMP(
"bg.bmp"
);
image =
SDL_LoadBMP(
"image.bmp"
);
return
0
;
}
接下来2
个函数将图片位拷贝到表面上:
int
SDL_BlitSurface(
SDL_Surface *
src,
SDL_Rect *
srcrect,
SDL_Surface *
dst,
SDL_Rect *
dstrect);
参数1
,原位图,参数2
,原位图矩形,参数3
,目标位图,参数4
,目标矩形
下面这个函数是我们创建的第一个DrawIMG
,忽略了参数4
,以及参数2
的width
和height
。
void
DrawIMG(
SDL_Surface *
img,
int
x,
int
y)
{
SDL_Rect dest;
dest.
x =
x;
dest.
y =
y;
SDL_BlitSurface(
img,
NULL,
screen,
&
dest);
}
第
2
个
drawing
函数
void
DrawIMG(
SDL_Surface *
img,
int
x,
int
y,
int
w,
int
h,
int
x2,
int
y2)
{
SDL_Rect dest;
dest.
x =
x;
dest.
y =
y;
SDL_Rect dest2;
dest2.x =
x2;
dest2.y =
y2;
dest2.w =
w;
dest2.h =
h;
SDL_BlitSurface(
img,
&
dest2,
screen,
&
dest);
}
接下来看这个绘制屏幕的主函数
void
DrawScene()
{
DrawIMG(
back,
xpos-
2
,
ypos-
2
,
132
,
132
,
xpos-
2
,
ypos-
2
);
DrawIMG(
image,
xpos,
ypos);
SDL_Flip(
screen);
}
剩下要做的的就在main
函数里面了,我们设置了一个uint8
的指针变量,
int
main
(
int
argc,
char
*
argv[])
{
Uint8*
keys;
//
标准的初始化
if
(
SDL_Init(
SDL_INIT_AUDIO|
SDL_INIT_VIDEO)
<
0
)
{
printf(
"Unable to init
SDL: %s\n"
,
SDL_GetError());
exit(
1
);
}
atexit(
SDL_Quit);
screen=
SDL_SetVideoMode(
640
,
480,
32
,
SDL_HWSURFACE|
SDL_DOUBLEBUF);
if
(
screen
==
NULL )
{
printf(
"Unable to set
640x480 video: %s\n"
,
SDL_GetError());
exit(
1
);
}
InitImages();
DrawBG();
//
开始主循环,检测退出以及escape
按键.
int
done=
0
;
while
(
done ==
0
)
{
SDL_Event event;
while
(
SDL_PollEvent(
&
event)
)
{
if
(
event.
type ==
SDL_QUIT
)
{
done =
1
;
}
if
(
event.
type ==
SDL_KEYDOWN )
{
if
(
event.
key.
keysym.
sym ==
SDLK_ESCAPE )
{
done =
1
;
}
}
}
然后我们调用SDL_GetKeyState(
NULL)
得到当下的按键状态,我们之所以没有在
游戏的主循环检测方向键,是因为没有在主循环中,只有按键被按下的时候才发生,而不知道目前是否依然处于按下状态。
keys =
SDL_GetKeyState(
NULL);
if
(
keys[
SDLK_UP]
)
{
ypos -=
1
;
}
if
(
keys[
SDLK_DOWN]
)
{
ypos +=
1
;
}
if
(
keys[
SDLK_LEFT]
)
{
xpos -=
1
;
}
if
(
keys[
SDLK_RIGHT]
)
{
xpos +=
1
;
}
//
然后我们绘制主屏幕
DrawScene();
}
//
最后退出
return
0
;
}
分享到:
相关推荐
**Dev-C++ 开源软件便携版** Dev-C++ 是一款免费且开源的集成开发环境(IDE),专为C和C++编程语言设计。这款软件的便携版本允许用户将其存储在USB驱动器等移动设备上,无需在目标计算机上进行安装即可使用,非常...
在开发过程中,你可能会遇到各种问题,如内存管理、性能优化、图形渲染、多线程同步等,这些问题都可以通过查阅SDL2的官方文档、在线资源或社区论坛来解决。总的来说,SDL2是一个强大的工具,可以帮助开发者在...
这个过程中,你不仅会学到如何使用SDL2库,还会接触到视频编码、色彩空间转换以及多媒体数据处理等概念。随着对SDL2的进一步探索,你还可以添加更多功能,如音轨支持、播放速度控制以及更复杂的用户界面。
在C++中实现俄罗斯方块,开发者需要掌握基本的图形界面编程,通常会使用到如SDL(Simple DirectMedia Layer)或SFML(Simple and Fast Multimedia Library)这样的库来创建窗口和绘制图形。在这个模式下,程序会生成...
此外,考虑到"带有背景音乐"这一特点,项目可能包含了音频处理,这可能需要利用第三方库如SDL_mixer来播放背景音乐,实现声音与视觉效果的同步。 在程序结构上,一般会有一个主循环(main loop)来处理用户输入和...
5. 声音处理:C++可以通过OpenAL或SDL Mixer等库来集成声音效果,提供游戏的音频反馈。 6. 状态管理:射击游戏往往包含多个游戏状态(如主菜单、游戏进行中、暂停、结束等)。C++的类和对象可以用来组织和管理这些...
Dev-Cpp是一款经典的开源C++集成开发环境,特别适合初学者和专业开发者使用。这个软件包的名称"Dev-Cpp.5.10.TDM-GCC.4.8.1.Setup"表明它是一个安装程序,版本为5.10,内嵌了TDM-GCC编译器版本4.8.1。TDM-GCC是GCC...
在本文中,我们将深入探讨如何在C++的QT框架中嵌入SDL2库来播放YUV格式的视频文件。这是一项技术性强且实用的任务,它结合了多种编程技术和媒体处理知识。 首先,让我们理解一下涉及的技术术语: 1. **QT**:QT是...
对于Ubuntu等Linux系统,可以通过包管理器安装,如`sudo apt-get install libqt5svg5-dev libsdl2-dev libglu1-mesa-dev`。 2. **创建QT项目**:使用QT Creator创建一个新的QT项目,选择C++作为编程语言。 3. **...
【标题】"用C++实现局域网聊天系统"揭示了这个项目的核心是利用C++编程语言构建一个能够在局域网环境下运行的聊天系统。在局域网内,多个用户可以通过该系统实现实时交流、文件共享以及多媒体功能,如音乐播放。C++...
在图形渲染方面,虽然C++本身并不支持图形库,但可以借助第三方库如SDL(Simple DirectMedia Layer)或SFML(Simple and Fast Multimedia Library)来处理。这些库提供了图形绘制、音频播放、事件处理等功能,使得...
下面是一个简单的C++示例,展示了如何使用SDL和FFmpeg播放视频文件: ```cpp #include #include #include #include <SDL2/SDL.h> // 省略初始化、打开文件、获取流等步骤 // 创建SDL渲染上下文 SDL_Init(SDL_...
2. **DEVC++ IDE**:DEVC++是Bloodshed Software开发的一款免费、开源的C++集成开发环境,它包含MinGW编译器,可以方便地进行代码编写、编译和调试。在本项目中,DEVC++用于编辑源代码并构建游戏程序。 3. **游戏...
Dev-C++是一款轻量级的C++集成开发环境(IDE),特别适合初学者学习和使用。这个压缩包“Dev-cpp5.4.0及API帮助文档.rar”包含的是Dev-C++ 5.4.0版本及其相关的API帮助文档,为用户提供了完整的编程工具和丰富的参考...
FFmpeg和SDL是两个在音视频处理领域广泛应用的开源库。FFmpeg是一个强大的跨平台工具...通过学习和使用这个项目,你可以深入理解FFmpeg和SDL的工作原理,以及如何在C/C++环境中整合这两个库来实现自己的多媒体应用。
6. **网络同步**(如果适用):虽然描述中没有明确指出,但如果是网络双人游戏,还需要处理网络同步问题。这可能涉及到使用TCP或UDP协议进行数据传输,确保两个玩家的状态保持一致。 在提供的压缩包文件"双人战斗...
`pycsdl2`使得Python程序员可以方便地利用SDL2的功能,而无需直接编写C或C++代码。 资源的全名`pycsdl2-2.0.0.0.dev5.tar.gz`揭示了一些关键信息。`2.0.0.0.dev5`表明这是pycsdl2的一个开发版本,版本号中的`dev`...
ffplay 是 FFmpeg 提供的一个简单播放器,基于 SDL 库构建。它能够播放各种音频和视频文件,同时提供了基本的播放控制功能,如暂停、快进、快退等。ffplay 的源代码是学习 FFmpeg 播放机制的好材料,开发者可以通过...
2. **打开摄像头**:使用ffmpeg的`avdevice_open_input`函数打开USB摄像头,提供设备名或URL(通常为`/dev/video0`或`rtsp://<ip>:<port>`)。 3. **配置视频流**:设置解码器上下文和帧率,使用`avformat_find_...
在C++中,要创建一个V4L视频采集程序,首先要打开设备文件,通常位于`/dev/video0`或`/dev/videoN`(N代表设备编号)。使用`open`函数打开设备,并确保有适当的访问权限。接着,通过`ioctl`调用来获取设备信息,如...