加载并显示图片
今天我们要做的很简单,就是绘制一个好看的背景,然后绘制一个方块在上面,你能使用
键盘来移动方块。
定义三个表面,和一个坐标
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++ 使用 SDL
Lazy Foo' 的SDL游戏入门教程(全),pdf打包,完整源代码。
awd控制 暂时游戏就这么简单 翻译 竹田某太郎
devcpp-cmake-template-devcpp-sdl-templatedevcpp-cmake-template-devcpp-sdl-templatedevcpp-cmake-template-devcpp-sdl-templatedevcpp-cmake-template-devcpp-sdl-templatedevcpp-cmake-template-devcpp-sdl-...
SDL2_ttf-2.0.14-win32-x64 & SDL2_ttf-2.0.14-win32-x86 二进制运行文件dll
基于C++和SDL2.0库开发植物大战僵尸游戏源码.zip基于C++和SDL2.0库开发植物大战僵尸游戏源码.zip基于C++和SDL2.0库开发植物大战僵尸游戏源码.zip基于C++和SDL2.0库开发植物大战僵尸游戏源码.zip基于C++和SDL2.0库...
C++使用SDL库做的飞机大战游戏,部分代码参考《C++游戏编程:创建3D游戏》。详细介绍见:https://blog.csdn.net/qq_54121864/article/details/120624039 最新版本为2.0版,支持召唤友军,详细介绍见我的另一篇博客...
Dev-Cpp/Mingw32环境介绍 第一章 简介 第二章 新建项目与编译 第三章 为你的Dev-Cpp安装开发包 第四章 工程的导入与导出 第五章 在Dev-Cpp下的程序调试 第六章 在提示符下的程序调试 第七章 在你的程序中使用静态...
1. QT5 Fix Compile Error 2. 字体放大到小四 1. 编译 Qt4 3. 编译 QT5
C4droid C++的sdl演示源码
NULL 博文链接:https://public0821.iteye.com/blog/292056
使用c++ sdl库编写人物移动小游戏 可发射子弹
默认OpenCV是采用弹出窗口的方式来显示图像的,而很多情况下我们需要将采集出来的图像用内嵌或子窗口方式显示到我们自己的...分别采用了两种方法显示图像:一种是用GDI(仅支持Windows),另外一种用跨平台的SDL库。
基于C++与SDL的迷宫游戏 C++是一种广泛使用的编程语言,它是由Bjarne Stroustrup于1979年在新泽西州美利山贝尔实验室开始设计开发的。C++是C语言的扩展,旨在提供更强大的编程能力,包括面向对象编程和泛型...
使用SDL库,该库可用来编写图形界面的软件,编写了俄罗斯方块的小游戏,游戏虽然简单,但对初学者来说,编写有挑战性
SDL1.0,C++
C++程序设计:C++复刻金庸群侠传以SDL2为基础实现的2D游戏引擎 这是一个以SDL2为基础实现的2D游戏框架,同时相当于提供了一个使用该框架制作DOS游戏金庸群侠传移植版的范例。有问题先看根目录说明。
Ffmpeg 和 SDL 同步视频,做音视频看到一文章
包含文件: SDL2-devel-2.0.20-mingw.tar.gz SDL2-2.0.20-win32-x64 SDL2-devel-2.0.20-VC++库.zip
非常好的sdl教程,建立了一个非常实用的游戏框架