用C++实现跨平台游戏引擎开发

用C++实现跨平台游戏引擎开发,第1张

用C++实现跨平台游戏引擎开发,第2张

你是否梦想写一款格斗游戏却无从下手?你对游戏开发感兴趣仅仅是因为好玩吗?本文将分析一个通用的跨平台游戏引擎,每个游戏开发新手都可以自由使用。

1.3D游戏引擎简史

在游戏开发中,从一开始就确定合适的开发平台很重要。你的游戏支持Windows,Linux和OS X吗?你的游戏开发只用OpenGL够吗?OpenGL是在19世纪90年代早期设计的。起初,它只能在价值约25,000美元的Unix CAD工作站上运行。后来移植到Windows等低端平台。与此同时,随着游戏行业的发展,图形加速器的价格从2000美元急剧下降到今天你看到的150美元左右的大众市场价格。

的确,很多人会把1996年用OpenGL开发成功的革命性游戏《雷神之锤》作为上述快速发展的直接原因。然而,成功的雷神之锤级游戏开发标准要求更多:音频支持、网络连接、用户输入设备支持和实时管理能力。需要实现跨平台支持和刺激的游戏效果。要实现这样的解决方案,就要建立一个像样的游戏开发平台。

2.适用于C++、Java和其他开发语言的简单DirectMedia层

没错,历史就是这么有趣,但并不是每个游戏都要克隆雷神之锤。被业内许多人吹捧为具有许多优点的选择是简单的直接媒体层(SDML)。这套跨平台的多媒体库提供了对音频、键盘、鼠标、操纵杆、OpenGL和2D视频帧缓冲区的低级访问。SDML几乎支持我能想象到的所有平台,包括Linux、Windows、所有MacOS异物、WinCE、Dreamcast等操作系统。它被广泛应用于MPEG播放器、硬件模拟器和许多流行游戏的开发,包括在Linux平台上运行的获奖游戏《文明:权力的召唤》。

SDML是用C写的,但它生来就是与C++一起工作的,并且已经绑定了许多其他语言,包括Ada、Eiffel、Java、Lua、ML、Perl、PHP、Pike、Python和Ruby。SDML的应用环境没有限制,恰好是我最喜欢的开源飞行模拟器GL-117的开发引擎(见图1)。事实上,513游戏目前的开发已经基于SDML引擎,并在SDML首页注册。

3.频道视觉效果演示节目

研究游戏引擎的方法是看一些示例程序代码。简要地看一下图2中用SDML实现的2D通道类型演示图,您可以看到只用几行代码就能做些什么。您可以将该实例用作屏幕保护程序、音乐可视化动画等等。限于篇幅,我编译了实际的绘图代码。请跟随我的评论来分析以下关于SDML如何工作的描述:

# include "tunnel.h"
/SDL相关变量定义
SDL _表面*屏幕,* bbuffer,*图像;
SDL_Rect rScreen,rBuffer
int main (int argc,char * * argv)
{
int flag = SDL _ SW surface;//请求软件表面。
//软件面在系统内存中,
/一般没有硬件面快
# ifdef win32
int full screen = messagebox(null," show full screen(y/n):" " screen setting "。
if(full screen = = IDYES){
flag | = SDL _全屏;//如果用户需要,接管整个屏幕
}
# endif
tunnel _ timer();//读取启动系统时钟值
SDL _初始化(SDL _初始化_视频);//初始化视频子系统
//设置屏幕为320x240,32位彩色
screen = SDL _ Set video mode(320,240,32,flag);
//如果有,请求屏幕surface的硬件缓冲区
bBuffer = SDL _ CreateRGBSurface(SDL _ HW surface,screen-> W,screen-> H,screen-> format-> Bitsperpixel,
screen->format->Rmask,
screen->format->Gmask,
screen->format->Bmask,
screen-> format-> format-> Amask);
//这是种子图片,一旦启动就会悬停
image = SDL _ load BMP(" tunnel _ map . BMP ");
Image = SDL_ConvertSurface(图像,屏幕->格式,SDL _ HW surface);
rbuffer . x = 0;
r buffer . y = 0;
r buffer . w = bBuffer-> w;
rbuffer . h = bBuffer-> h;
//忽略大部分事件,包括鼠标动作,取消光标
SDL _事件状态(SDL _主动事件,SDL _忽略);
SDL _事件状态(SDL _鼠标运动,SDL _忽略);
SDL _显示光标(SDL _禁用);
隧道。集合(320,240);//通道将填满整个缓冲区
隧道。预计算(16);//内圆直径
while(SDL _ poll event(null)= = 0){
float time = tunnel _ gettime();
//修改前必须锁定曲面,尤其是缓冲区在图形硬件内存
SDL _洛克曲面(bBuffer);
SDL _洛克曲面(图片);
隧道。Draw(bBuffer,Image,180*sin(fTime),fTime * 100);
SDL _ unlock surface(bBuffer);//更新后可以解锁锁
SDL_UnlockSurface(图片);
//将缓冲区中的数据输出到屏幕绘制区并强制重绘
SDL _ blitsurface (bbuffer,null,screen,& r buffer);
SDL_UpdateRect( screen,0,0,0,0);
}
隧道。free();
}

4.探索其他游戏引擎

再来看看其他一些开源游戏引擎。

A) ALLEGRO(Allegro低级游戏开发例程)

Allegro是一个开源的可移植库,主要用于视频游戏和多媒体编程。Allegro由Shawn Hargreaves(最近叫Climax)创立,现在已经成长为一个可以跨越Linux、Windows、MacOS、MS-DOS等多种操作系统和众多流行平台的游戏系统。

除了拥有先进的2D图形库,它可以轻松访问鼠标,键盘,操纵杆和高精度定时器中断。allegro并不打包或替换OpenGL,但通过访问他们广泛的开发网站(http://www.allegro.cc/),您可以了解如何将OpenGL集成到Allegro游戏程序中。

大约有700个不同的游戏项目,与Allegro一起发布,其中最突出的两个是街机游戏和益智游戏。特别喜欢经典街机游戏Zaxxon的重磅产品(见图3)。

B) Irrlicht:启动快速实时3D引擎

这个Irrlicht引擎是一个跨平台、高性能的实时引擎,用C++编写。可以选择Direct3D、OpenGL或者基于软件的着色技术。高端功能包括动态阴影、粒子系统、角色动画、进出技术和碰撞检测(见图4)。Irrlicht支持Windows和Linux,并提供与Java、Perl、Ruby等语言的绑定。行业先驱尼古拉·格布哈特(Nikolaus Gebhardt)在朋友的一点帮助下完成了这项引擎工作。

C) ClanLib:为多人游戏设计的引擎

ClanLib提供了一个平面*垂直的接口来编写游戏——他们有一个通用的接口来连接DirectX和OpenGL等底层库。借助ClanLib,只需编写少量代码,就可以在Windows、Linux和OSX系统上开发游戏程序。ClanLib包括一个广泛的声音库,2D碰撞检测,动画,GUI框架和网络库。图5显示了游戏XenoHammer中的一个场景。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用C++实现跨平台游戏引擎开发

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情