FMOD
FMOD 是一个非常容易使用的跨平台声音引擎,能够在 WINDOWS,WINDOWS CE,LINUX,MACINTOSH,GAMECUBE,PLAYSTATION 2和XBOX上使用。支持 C/C++,VB,DELPHI和MASE。如果你在以上说明的任何一种平台上使用任何一种语言,那么FMOD适合你。本篇中使用的是C语言,同样他也适合其他平台。 相关的声音库 另一个相关的声音库是OPENAL。OPENAL是另一个跨平台的适应API,也同样支持WINDOWS,LINUX和MACINTOSH。同样能应用于C/C++,DELPHI和JAVA。风格有点象OPENGL。 http://www.fmod.org 开始之前,请将FMOD.DLL拷贝到你的工作目录下,也就是和你的项目文件在一起。 与C语言用户相关 在你的编译器下加入"fmod.h" 文件和库文件: fmodvc.lib for Microsoft Visual C++ and Codewarrior fmodbc.lib for Borland fmodwc.lib for Watcom fmodcc.lib for LCC-Win32 libfmod.a for MingW and CygWin fmod-3-7.lib for GCC 在我们用FMOD播放我们的声音文件时,我们要先初始他。像下面这样: FSOUND_Init (44100, 32, 0); 第一参数是输出率,用赫兹表示。在这里,我们取44100。第二个参数是我们最大的软通道。第三个参数是我们想表明的一些符号。在这里,我们取0; 下面,我们将播放一些声音了。我们播放的声音有哪些格式呢?是歌,例子或流? 歌,例子或流 FMOD支持两种API:FSOUND和FMUSIC。具体用哪个将由你要播放的声音决定。 通常的音乐格式有:.MOD,.S3M,.XM,.IT,.MID,.RMI,.SGT和.FSB,这些都被FMUSIC API支持。 而FSOUND API支持压缩的.WAV,.MP2,.MP3,.OGG or .RAW。 DEV C++下依靠上面的代码编 openal 3D音频编码 有OPENGL编程精练的人将很快掌握OPENAL。OPENAL有建立3D环境音效的能力。 #include <conio.h> #include <stdlib.h> #include <al/al.h> #include <al/alc.h> #include <al/alu.h> #include <al/alut.h> 你会发现再OPENAL头和OPENGL头的定义上有许多的相似之处。除了“al.h","al u.h","alut.h"与”gl.h","glu.h","glut.h"相似,还增加了一个"alc.h".ALC( AUDIO LIBRARY CONTEXT)处理声音通过不同的平台,她也处理你在几个窗口下共 享设备的环境。 // 存储声音数据 ALuint Buffer; // 用于播放声音 ALuint Source; 这是程序处理结构的初始化。在OPENAL中三种不同的结构,所有关于声音播放和 声音数据存储在一个内存中,源(source)是指向放声音的空间。明白源是非常 的重要。源只播放内存中的背景声音数据。源也给出了特殊的属性如位置和速度。 第三个对象是听者,用户就是那唯一的听者。听者属性属于源属性,决定如何 听声音。例如,不同位置将决定声音的速度。 http://www.openal.org/ libogg - 音频编码。有关oggvorbis开发,主要为*.ogg码流结构及封装的文件,和vorbis-tools,libvorbis一起使用 http://www.vorbis.com/ 包含文件 vorbisfile.dll,vorbis.dll,ogg.dll libmad MP3流媒体解码器,播放mp3文件 libmad附带了一个示例程序minimad, 但是仅仅是将解码结果输出到屏幕上,不爽,而libao则可以将pcm输出,通过多种方式播放出来,因此可以考虑将两者结合起来,编写一个可以播放mp3的小例子 #include <sys/soundcard.h> #undef putchar int soundfd; int putchar(int c) { return write(soundfd, (char *)&c, 1); } void set_dsp() { int rate = 441000;; /* 采样频率 44.1KHz*/ int format = AFMT_S16_LE; /* 量化位数 16*/ int channels = 2; /* 声道数 2*/ soundfd = open ( "/dev/dsp", O_WRONLY); ioctl(soundfd, SNDCTL_DSP_SPEED, &rate); ioctl(soundfd, SNDCTL_DSP_SETFMT, &format); ioctl(soundfd, SNDCTL_DSP_CHANNELS, &channels); } http://www.underbit.com/products/mad/ TinyXml 轻量级XML解析器,游戏中常用解析简单的配置文件。 游戏中是使用一个INI文件来定义。这是一个好的办法,我们每次使用时从外部导入我们的数据,而不用每次修改时都编程一次。而我们今天在这里要讲解的是用XML文件来设置 许多人将XML用到很多需要活动设置的应用,比如服务器参数的设置,玩家数据的管理(最近才发现的,原来以为是在数据库中进行管理的,后来发现XML文件也能管理玩家数据,并且比操作数据库要方便的多)。还有人甚至用XML文件来设置窗口界面。看来掌握XML是非常有意义的。 我们下面来看一下tinyxml是如何在C/C++中建立XML文件的。 char floader[200],buffer[200]; TiXmlDocument* m_xmlDoc = new TiXmlDocument(); TiXmlElement xElement("player"); sprintf(buffer,"%d", 1); xElement.SetAttribute("admin", buffer); TiXmlElement xPos("pos"); sprintf(buffer,"%d",2); xPos.SetAttribute("x", buffer); sprintf(buffer,"%d",3); xPos.SetAttribute("y", buffer); sprintf(buffer,"%d",4); xPos.SetAttribute("zone", buffer); xElement.InsertEndChild(xPos); m_xmlDoc->InsertEndChild(xElement); sprintf(floader,"%s.xml", "antking"); m_xmlDoc->SaveFile(floader); delete m_xmlDoc;...... 这段简单的代码的作用就是将用户数据保存在XML文件中。不同的是我对其做了一些简化。 www.grinninglizard.com/tinyxml/ sourceforge.net/projects/tinyxml GeSHi 语法加亮显示工具: GeSHi是Generic Syntax Highlighter的缩写,即通用语法高亮工具。 GeSHi由PHP写成,是目前最流行的代码语法加亮工具,可以在phpBB、WordPrss、Mambo、mediawiki、DokuWiki等众多程序中发挥作用。 GeShi能够处理50多种计算机源代码的加亮,这几乎包括了所有的常见计算机代码,例如网页脚本、面相对象编程或者其他程序文本。 GeSHi是Nigel McNie的作品,遵从GFDL协议。本程序仍在持续更新,最新稳定版本为1.0.7.16(2006-11-26),测试版本1.12alpha3(2006-9-17)。 GeSHi出差不多是世界上最好的语法高亮工具的代名词。 http://geshi.org/ SDL 免费的跨平台多媒体应用编程接口 * 用于游戏、游戏开发工具、模拟器、样本演示、多媒体应用等 它能做什么? 视频、音频、事件、CDROM支持、线程、计时器、各种图象文件格式读取、快速绘图、混音、游戏杆支持、网络、MPEG解码等等,且CPU字节顺序无关。 大体上与DirectX比较对应关系如下: * SDL_Video、SDL_Image、OpenGL —— DirectDraw、Direct3D * SDL_Audio、SDL_Mixer —— DirectSound * SDL_Joystick、SDL_Base —— DirectInput * SDL_Net —— DirectPlay * SMPEG、SDL_Video、SDL_Audio、SDL_Sound、SDL_Filter —— DirectShow * 字体、窗口管理等其他实用工具和大量样例 http://www.libsdl.org/ SDL本身只支持加载BMP文件,如果你想显示其他类型的图像文件,就要用到扩展类库,扩展类库里面还有其他一些组件,你可以在这里下载到 http://www.libsdl.org/projects/SDL_image/ 包含文件:SDL_mixer.dll SDL_image.dll SDL.dll SDL_net.dl [引擎]开源2 D引擎HGE(D3D加速) HGE简单的说,就是以3D加速实现2D图像的做法,就是RMXP內部的绘图功能(Game Maker也是),HGE使用DX8作为图像加速库,在Windows XP以后的系统,无须更新DX版本即可运行(这意味著你的游戏有较好的市场) HGE1.6版本在今年8月底公开源码,授权是慷慨的ZLib License,任何人可以几乎不受限制的使用它,或基於技术核心开发引擎。 我们可以预期他在游戏市场中被广泛使用.... 请到首页下载包装(並提供SourceForge连结) 首页:http://hge.relishgames.c... 论坛:http://relishgames.com/f... 源码:http://sourceforge.net/p... 標准的HGE包装是没法著中文/双字节的, 至少现在还没看到Unicode化的打算,除非自己用源码改。 http://relishgames.com/f... 这是国人研发的点阵中文显示方案,常用於各种游戏SDK, 当然往后希望能出现真正支持中文的版本(实际上在进行中)。 Libcurl (HTTP downloads)为一个免费开源的,客户端url传输库,支持 FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持 Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用。 http://curl.haxx.se/ CEGUI CEGUI 全称 "Crazy Eddie's GUI System"是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。 CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。另外,使用更高级的图形库也是可以的,像是OGRE、Irrlicht和RenderWare: 除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor,以方便UI的制作。 http://www.cegui.org.uk guichan guichan 是一个界面库GUI library 使用于 Allegro, SDL 或OpenGL http://guichan.sourceforge.net/screenshots.shtml PyGame 制作游戏 Pygame 是用于编写游戏的一组Python模块. 她基于是十分优秀的SDL库. 您可以用python创建功能强大的、多媒体程序. Pygame 是跨平台的,几乎可以运行于各种平台。 http://www.pygame.org/ Anti-Grain Geometry Anti-Grain Geometry(以下简称AGG)是一个用标准的平台无关的C++写成的通用图形工具包。它可以应用在计算机程序中需要高质量的2D图形的许多方面。例如,AGG可以用于渲染2D地图。AGG只使用了C++和标准C的函数,如memcpy,sin,cos,sqrt等。基本的算法甚至没有使用C++ Standard Template Library。因此,AGG能够在大量的应用软件中使用,包括嵌入式系统中。 AGG刚刚更新了版本,目前版本是2.5。 Anti-Grain Geometry,也许是目前,开源的最牛X的2D渲染引擎,当然也是跨平台的,不依赖于某一个操作系统!而且速度巨快,当然STL也是用的非常多。 AGG简介 AGG是一个用标准的平台无关的C++写成的通用图形工具包。它可以应用在计算机程序中需要高质量的2D图形的许多方面。例如,AGG可以用于渲染2D地图。AGG只使用了C++和标准C的函数,如memcpy,sin,cos,sqrt等。基本的算法甚至没有使用C++ Standard Template Library。因此,AGG能够在大量的应用软件中使用,包括嵌入式系统中。 另一方面,AGG允许对库的一部分进行替换,比如在它不能适应性能的要求时。如果需要,你也能够添加其他的颜色空间。因为AGG是基于C++的模板机制的。 AGG不是一个紧密的图形库,它并不容易使用。这是由于考虑到AGG是一个“创建其他工具的工具”。这意味着,没有“Graphcis”对象或是其他类似的东西。取而代之的是许多组织松散的、能单独或是组合使用的算法。这些算法有着定义良好的接口,它们之间有着尽可能最小的隐式或显式的依赖关系。 网址:http://www.antigrain.com/ |