第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触

http://blog.csdn.net/visioncat/article/details/1596576

GCC for Win32 开发环境介绍(5)

第四章 跨平台图像显示库——SDL

第一节 与SDL第一次亲密接触

SDL,也就是 Simple DirectMedia Layer 是一个针对 声音,键盘,鼠标,遥杆,通过OpenGL的3D以及2D处理的底层跨平台函数库。她主要支持的平台有Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, 和QNX. 。当然,还有一些非官方的支持平台。

总体来说,SDL对于图像的处理性能还是不错的,而且能在基本不修改代码的情况下,能支持多平台的编译。这点的确是非常不错的。如果你想开发什么跨平台的游戏之类的,SDL确实是一个不错的选择。其次,SDL是用C写的,所以也可以得到很多其他语言的支持,主要有Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, 和 Smalltalk

SDL的官方网站是 http://www.libsdl.org 我们可以从她的官网上免费获得其源代码和编译成功的库。其他的还有一些Demo,文档,基于SDL所扩展出来的库,成功的案例等等很多SDL的资料。

SDL的使用概览

在正式使用中SDL的易用性也是显而易见的。通过一些简单的代码便能够编写出图形的显示程序。而且,SDL的编程思想也是很容易理解的。

SDL的程序代码主要有四部分组成。她们分别是 初始化阶段,程序运行阶段,事件等待与处理阶段,资源释放阶段。

初始化阶段,主要完成程序的初始化工作。如SDL的函数初始化,还有程序自身的一些初始化操作,如窗口的建立,背景色的设置,等等。程序运行阶段,主要完成程序中所需要的媒体载入,和显示等,比如窗口的初始化内容的刷新等。事件等待与处理阶段,主要是用于等待窗口 键盘 摇杆 鼠标等事件然后更具程序所设定的进行相关的操作处理。资源释放阶段,主要用于释放程序中所用到的系统资源,如image图片资源的释放等。

这四个阶段的代码是非常容易实现,而且有一定的格式和方法。所以,相对来说虽然SDL的功能强大,但是代码的编写也还是比较清晰和简便的。

SDL库的编译与安装

SDL的安装分为两种,一种为从源码编译出库,然后安装。另一种是直接使用官网上为我们编译好的SDL库。下面我一一介绍不同的安装方式。

我们先来看看从源码编译安装的过程。

我们要从SDL的官方网站下载 SDL-1.2.x.tar.gz 。然后从MinGW的官方网站上下载MSYS-1.0.10.exe和msysDTK-1.0.1.exe。第一个为SDL的源代码,第二个和第三个为MinGW的POSIX接口。如果你准备在Cygwin下编译,那么第二,第三个包就不需要下载安装了。

解压缩源码包到一个目录下,然后开启你的SH,切换到你SDL源代码所保存的目录下。然后输入如下的一组命令。


$./configure

$make

上面两条指令就让你的GCC编译出了SDL。如果你使用的是MinGW,那么可以将include,lib,bin目录复制出来。这里我假设我们复制到 $(SDL) 目录中。如果你使用的是Cygwin,那么你需要输入如下命令让Cygwin自动安装。


$make install

当然,MinGW也是可以通过这种方式安装的。这样,SDL将安装入MinGW的MSYS安装目录中。

你也可以从官方网站上下载已经编译好的开发库。所要是SDL的开发库 SDL-devel-1.2.x-mingw32.tar.gz。将开发包里的东西解压缩到 $(SDL)目录中。

通过以上两种方式,我们就已经将SDL的开发环境正常安装到我们的机器上了。

当然,最后别忘记把SDL.dll这个文件复制到系统目录下,或者放在环境变量PATH所指向的一个目录中,亦或是你主程序所在的目录下。这样你的SDL程序才可以正常运行。

一个简单的SDL例子

下面给出一个SDL例子程序的源代码,以及他的Makefile文件,我们可以从Makefile文件中很直观的看到编译程序所需要的参数。

下面是C的例子代码


//main.c

#include <stdio.h>

#include <stdlib.h>

#include <SDL.h>

int main(int argc, char *argv[]){

SDL_Surface *screen;

SDL_Event event;

int isRun=1;

SDL_Init(SDL_INIT_VIDEO);

screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

SDL_Flip(screen);

while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}

SDL_FreeSurface(screen);

return(0);

}

下面是Makefile文件。


#Makefile

SDL_INCLUDE=$(SDL)/include

SDL_LIB=$(SDL)/lib/

all:

gcc -I$(SDL_INCLUDE) -c main.c -o main.o

gcc -L$(SDL_LIB) -o main main.o -lmingw32 -lSDLmain -lSDL

你所双击运行你所编译出来的程序,你将会看到一个类似于如下图所示的窗口。

上面那组代码的结构就是一个比较典型的SDL的代码格式。

初始化阶段


SDL_Surface *screen;

SDL_Event event;

int isRun=1;

SDL_Init(SDL_INIT_VIDEO);

程序运行阶段


screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

SDL_Flip(screen);

事件等待与处理阶段


while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}

资源释放阶段


SDL_FreeSurface(screen);

至此,我们有关SDL库的简单介绍就到这里了。其实,SDL还有很多东西。我们将在后面的章节详细介绍SDL的神气功能。

文外音:

感觉自从上一篇文章至今已经过去很久了。其实最近感觉蛮忙的吧。但我也不知道自己忙点什么。不过这些日子所经历的事情也很多,感悟也很多。但是,心情却被这些事情弄的很不好。也许正像我所说的,光来到世界,世界却因为黑暗不来接受光,反而弃绝光。可如今作为一个普通人的我又能怎么样呢?争取我所爱的?还是等待所爱的?我向来不喜欢和人争,总认为该是我的,总会是我的,不该是我的怎么努力也是无用的。可是如今我却觉得也许我错了吧。呵呵,不游戏,不抽烟,不喝酒的我看来真的只适合搞搞技术什么的吧。

最后还是感谢各位一直以来的支持。同时,如果您有任何的问题和建议都可以提出来。为了您能及时准确的获得回复,请到http://nirvana.cublog.cn上,或者http://blog.csdn.net/visioncat上发表你的留言。谢谢。当然,还要为我那么长时间没来更新表示歉意。

时间: 2024-10-23 20:59:56

第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触的相关文章

第2章 与c++第一次亲密接触

第2章 与c++第一次亲密接触 2.1 一个c++程序的自白 2.1.1 用visual studio创建c++程序 2.1.2 以手工方式创建c++程序 2.1.3 c++程序=预编译指令+程序代码+注释 2.1.4 编译器和链接器 2.1.5 c++程序的执行过程 2.1.6 程序的两大任务:描述数据与处理数据 2.2 基本输入/输出流 2.2.1 标准的输入和输出对象 2.2.2 输出格式控制 2.2.3 读/写文件 2.3 最常用的开发环境visual studio 2.3.1 visu

第六章 开发一个MapReduce应用 第一节 配置

在第二章中,我们介绍了MapReduce模式.在本章中,我们看看在实际中开发一个MapReduce 应用. 写一个MapReduce程序要遵循一个特定的模式.开始时你要写map和reduce函数,最好把单元 测试也写上,确保程序做了你想做的.然后你写一个驱动程序来运行一个job,它可以使用数据的一 小部分在你的集成开发环境中运行以检查它是否正常工作.如果失败,你需要使用你的IDE调试器来 找到程序的问题.然后你可以扩展你的单元测试来覆盖这种情况,促使你的map或reduce可以正确 处理这种输入

《MonkeyRunner原理剖析》第九章-MonkeyImage实现原理 - 第一节 - 关键类作用及关系

作者 自主博客 微信 CSDN 天地会珠海分舵 http://techgogogo.com 服务号:TechGoGoGo 扫描码: http://blog.csdn.net/zhubaitian

现代软件工程讨论第一章-第四章

第一章 1.代码如下 #include <iostream> #include <cstdio> #include <time.h> using namespace std; int main(){ srand(time(0)); while(1){ printf("随机生成的一个小学四则运算题目,除法省去余数\n"); int num1 = rand() % 10; int num2 = rand() % 10; int index = rand(

“全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零四章:匿名内部类与外部成员互访详解 下一章 "全栈2019"Java第一百零五章:匿名内部类覆盖作用域成员详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"

Python 3标准库 第十四章 应用构建模块

Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章     应用构建模块-----------------------------14.1  argparse:命令行选项和参数解析----------------------------- argparse模块 14.1.1  建立解析器 14.1.2  定义参数 argparse模块 14.1.3 

2019-2020-1学期 20192415 《网络空间安全专业导论》第一周学习总结 第四章

2019-2020-1学期 20192415 <网络空间安全专业导论>第二周学习总结 第四章 门与电路 硬件元件,用电信号表示操作二进制值 4.1 计算机与电学 信号电平区分信号的值: 0~2伏为低电压,由二进制数字0表示 2~5伏为高电压,由二进制数字1表示 门(gate):对电信号执行基本运算的设备. 电路(circuit):相互关联的门组合,用于实现特定的逻辑函数. 表示法: 布尔代数--用数学符号定义和操作逻辑电路 逻辑框图--图形化表示(特定) 真值表--列举,定义功能 注:三种表示

【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL

内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串

第四章

第四章 源代码的下载和编译 1.下载.编译和测试Android源代码 配置Android源代码的下载环境 ①创建一个存放下载脚本文件(repo)的目录 # mkdir  ~/bin # PATH=~/bin:$PATH ②下载repo脚本文件 # curi http://dl-ssl.google.com/dl/googlesource/git-repo/repo > -/bin/repo # chmod a+x ~/bin/repo ③创建存放Android源代码的目录 # mkdir and