SDL教程(一)
作者:akinggw
在阔别半年后,我又回来了。这次回来,首先要向大家问声好,然后继续我们的游戏开发之旅。在以前的日子里,我主要在翻译一些游戏开发方面的文章,而现在,我决定自己写。从今天开始,我要向大家介绍一个非常出名的游戏开发库——SDL。
SDL(Simple DirectMedia Layer)是什么呢?根据他的表面意思,翻译过来就是简单的指导媒体层。它的官方网站请访问 http://www.libsdl.org .
SDL 标志
SDL的作者是Sam Lantinga, Loki Entertainment Software的主力程序员(Lead Programmer)。Loki Entertainment是一家致力于向Linux移植顶尖游戏的公司。更多信息请访问 http://www.lokigames.com/
SDL是一个跨平台的多媒体函数库,被用来设计成在低层访问音频,键盘,鼠标,游戏杆,基于OPENGL(一个3D图象开发函数库)的3D 硬件,和2D图象帧缓冲区。它被广泛的用于基于MPEG的媒体播放软件,模拟器,和许多著名的游戏。最著名的游戏是赢得LIUNX组游戏开发大奖的 文明:权利的召唤(Civilization: Call To Power)。
文明:权利的召唤(Civilization: Call To Power)
SDL是一个跨平台的函数库,几乎支持现今所有平台:Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX。
SDL用C语言写成,但是可以很容易在C++下面工作,并且SDL绑定了许多其它的语言,这其中就包括Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, and Smalltalk。
最后,我们来了解一下SDL的版权问题,SDL在GNU LGPL 2(一个国际上的开源组织)下发布,这个版本允许你将SDL免费地用于商业软件的开发。
下面,我们来详细地了解SDL的功能,这样有利于我们今后的讲解。
SDL有哪些功能?
视频
· 设置8bpp或更高的任意色彩深度的视频模式。如果某个模式硬件不支持,可以选择转化为另一模式。
· 直接写入线性的图像帧缓冲(framebuffer)。
· 用颜色键值(colorkey)或者alpha混合属性创建surface。
· Surface的blit能自动的转化为目标格式。
blit是优化过的,并能使用硬件加速。x86平台上有针对MMX优化过的blit。
· 硬件加速的blit和fill(填充)操作,如果硬件支持的话。
事件
· 提供以下事件: o 应用程序的visibility发生改变 o 键盘输入 o 鼠标输入 o 用户要求的退出
· 每种事件都能通过SDL_EventState()关闭或者打开。
· 事件经由用户指定的过滤函数再被加入到内部的事件队列。
· 线程安全的事件队列。
音频
· 设置8位和16位的音频,单声道或者立体声,如果格式硬件不支持,可以选择转换。
· 由独立的线程执行音频部分,并提供用户回调(callback)机制。
· 设计上考虑到了客户定制的软混音器,但实际上在例程中就包含了一个完整的音频/音乐输出库。 CD音频 · 完整的CD音频控制API 线程
· 简单的线程创建API
· 用于同步的简单的二进制信号量(semaphores 定时器
· 读取已流逝的毫秒数。
· 等待指定的毫秒数。
· 设置一个10毫秒精度的周期性定时器。 字节序无关
· 侦测当前系统的字节序
· 快速转换数据的函数
· 读写指定字节序的数据
以上就是SDL大致的功能介绍,上面的介绍来源于SDL中文介绍文档。但许多后续的开发者在不断的完善SDL。所以,现在SDL不光能实现上面的基本功能,
还有下面所列的功能:
A. 支持MPG,PNG,GIF等压缩图象文件格式的显示;
B. 支持TrueType 字体的显示;
C. 通过SDL_NET,可以实现网络的联接;
这里,我们选择一个空的项目。点“Finish”按钮,这时会出现一个对话框,询问你是否真的决定为一个空的项目。选”OK“。
接下来,在VC6主面板中选择“Project”->”Setting”选项。
在C/C++表,在“Category"中设置成"Code Generation",在"Use run-time library"下设置成multithreaded dll。
|
到这里,我们算是配置完成。
下面我们要建一个C++源文件,点击"File",在"File"选择“C++ source file”.
然后在文件中拷贝下面的代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "SDL/SDL.h"
#include "windows.h"
SDL_Surface *screen = NULL; //屏幕接口
int main( int argc, char* args[] ) //主程序
{
char msg[500]; // 得到系统消息
int done;
/* 初始化SDL */
if (SDL_Init (SDL_INIT_VIDEO) < 0)
{
sprintf (msg, "不能初始化 SDL: %sn", SDL_GetError ());
MessageBox (0, msg, "Error", MB_ICONHAND);
exit (1);
}
atexit (SDL_Quit);
/* 设置 640x480 16-bits 图象模式 */
screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
if (screen == NULL)
{
sprintf (msg, "不能设置成 640x480x16 图象模式: %sn",
SDL_GetError ());
MessageBox (0, msg, "Error", MB_ICONHAND);
exit (2);
}
/*设置SDL窗口标题 */
SDL_WM_SetCaption ("hello,the world", NULL);
done = 0;
//游戏循环 done=1时退出,done=0时继续
while (!done)
{
SDL_Event event;
/* Check for events */
while (SDL_PollEvent (&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
break;
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
}
SDL_Quit();
return 0;
}
如果运行成功,它将显示一个空的窗口。
如图所示:
|
|
DEV C++安装好以后,我们就需要SDL的库文件,到SDL的官方网站http://www.libsdl.org .
在下载页面中,你会找到下面这个文件(就是红线所指的那个文件),点击它,把它下载下来。
|
|
|