linux中sdl的使用教程,SDL 编程基本知识

官方的编程简要教程

非常不错的SDL教程。

一.Window下SDL环境安装

-----------------------------------------------------------------

在Windows 下可以用多种开发环境来安装。具体方法参见

但一般我比较习惯于使用VC++6.0来开发SDL程序,以下介绍在VC++安装和使用库.

首先下载编译好的SDL开发库.(当然你可以自己行编译库,一般不推荐)

1.下载后解压到指定目录,假设是 e:\huisen\SDL下,把解压的头文件路径include拷贝一份改名为SDL(理由后面解释)

2.把lib/SDL.dll 拷贝到 windows\system32 ,以便程序运行能找到它运行。

配置VC++ 6.0。

在程序中使用SDL库,有两种模式,一种是在每个项目里加上SDL库的路径,另外一种更为简单好用的办法,是把SDL设为所有项目共享的库。方法在主菜单 tools-->options 选择directories页标签。

首先是头文件目当设为SDL库目录下的include目录,这样程序中直接可以使用头文件,在这里有一个细节,

一般SDL有头文件直接在include下面,但是LINUX版或一般的SDL程序是引用 #include

这里把include 设为引用目录,会将成头文件找不到。所以建议把include目录拷贝改成SDL,方便移植的程序可以找到头文件.将SDL目录本身设为include如下设置

100820185226.png

设SDL的lib路径为整个环境的库路径

100820173600.png

测试SDL游戏

我们用一个简单的DEMO来演示整个SDL环境使用

1.在VC++ 6.0中建立一个console项目,把hello.c加和到项目中。

2.在项目中加入对SDL的库的链接。(SDL.lib和SDLmain.lib) 如果是调试版,要忽略链接msvcrt.lib

100820224257.png

3.要求采用DLL多线程库来作运行库。(这是SDL FAQ的要求,否则有链接错误)

在项目选项,c/C++-->Code Generation-->Using Runtime library选择

Debug MultiThread DLL(DEBUG版)或者 MultiThread DLL(Release版)

100820225101.png

4.删除编译选项中的/GZ (编译器堆栈检查功能).这个主要是为了去掉如下链接错误

error LNK2001: unresolved external symbol __chkesp

(参见上图)

运行测试程序,会有如下效果.

100820225822.jpg

注意后面有一个控制台出现,所有printf将输出到终端上来。如果不需要显示控制台。

可以把链接选项里的 /subsystem:console 改为 /subsystem:windows 即可

二.Linux的SDL开发环境安装

-----------------------------------------------------------------

Linux 首先需要安装SDL库和SDL开发库。安装方式有两种,一种是编译后安装(这个方法出问题可能性最小,建议用这个方法)

另外一种是用rpm包来安装库和开发包。

第一种方法编译安装首先下载

简单的解压缩

tar xvzf SDL-1.2.14.tar.gz

然后

./configure

make

make install.

它将安装库到 /usr/local/lib ,头文件在/usr/local/include当中。

测试hello程序

gcc -o hello hello.c -lSDL  #编译语句

执行程序 export LD_LIBRARY_PATH=/usr/local/lib;./hello

如果正确无误将会显示如下界面

100820232622.png

三.SDL编程基本流程.

----------------------------------------------------------------

SDL开发使用相关数据结构,必须在源码中使用 #include

在Linux链接时,必须要链接libSDL.so库。 即在gcc语句加入 -lSDL 选项.

Windows下在VC界面的项目选项的链接库,加入 SDL.lib链接语句。

SDL由八个子系统组成——音频、CDROM、事件处理、文件I/O、游戏杆、线程、记时器和视频,

在使用SDL库时,在程序开源要调用

SDL_Init()来初始化,它有如下定义:

int SDL_Init(Uint32 flags);

其中flags指明是哪一个子系统在初始化装入。一般用 SDL_INIT_EVERYTHING,表示所有模块装入.

实始化成功返回为0,失败返回-1;

如想初始化特定模块,可用特殊选项。如下列语句用于实始化视频与定时器模块

SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);

当SDL程序即出时,须调用SDL_Quit();来做一些清除工作。

基本框架代码

#include

int main()

{

if((SDL_Init(SDL_INIT_EVERYTHING)==-1)) {

printf("Could not initialize SDL: %s.\n", SDL_GetError());

return -1;

}

printf("hello ,the SDL world\n");

/* Shutdown all subsystems */

SDL_Quit();

}

zip.gif

文件:

hello_sdl.zip

大小:

9KB

下载:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值