每个游戏开发新手都可以自由地使用的跨平台游戏引擎

每个游戏开发新手都可以自由地使用的跨平台游戏引擎

1. 3D游戏引擎简史

在游戏开发中,从一开始就确定正确的开发平台非常重要。 你们的游戏支持 Windows、Linux 和 OS X 吗? 你的游戏开发只使用OpenGL就足够了吗? OpenGL 设计于 20 世纪 90 年代初游戏策划,最初运行在价格约为 25,000 美元的 Unix CAD 工作站上。 后来被移植到Windows和其他低端平台。 与此同时,随着游戏行业的发展,图形加速器的价格从 2,000 美元暴跌至今天的大众市场价格 150 美元左右。

确实,很多人都会引用1996年使用OpenGL成功开发的革命性游戏Quake作为上述快速发展现象的直接原因。 然而,成功的 Quake 级游戏开发标准还需要更多:世界一流的音频支持、网络连接、用户输入设备支持和实时管理功能。 既要实现跨平台支持,又要实现精彩的游戏效果。 要实现这样的解决方案,最好建立一个像样的游戏开发网站。

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主页注册。

图 1. GL-117 的视图

3.频道视觉效果演示方案

研究游戏引擎的最好方法是查看一些示例程序代码。 只需查看图 2 中使用 SDML 实现的 2D 通道类型演示图,您就可以看到只需几行代码即可完成的任务。 你可以使用这个实例作为屏幕保护、音乐可视化、动画效果等。由于篇幅限制,我已经编译了实际的绘图代码。 请按照我的评论分析以下关于 SDML 工作原理的描述:

#include“隧道.h”

//SDL相关变量定义

SDL_Surface *屏幕,*bBuffer,*图像;

SDL_Rect rScreen,rBuffer;

int main (int argc, char **argv)

int flag = SDL_SWSURFACE;//请求软件表面。

//软件表面位于系统内存中,

// 一般不如硬件表面速度快

#ifdef WIN32

int fullscreen = MessageBox(NULL, "显示全屏 (y/n):", "屏幕设置", MB_YESNO);

如果(全屏==IDYES){

标志 |= SDL_FULLSCREEN; // 如果用户需要的话接管整个屏幕

#万一

Tunnel_Timer(); // 读取起始系统时钟值

SDL_Init( SDL_INIT_VIDEO ); // 初始化视频子系统

//设置屏幕为320x240,32位颜色

屏幕 = SDL_SetVideoMode( 320, 240, 32, 标志);

// 请求屏幕表面的硬件缓冲(如果可用)

bBuffer = SDL_CreateRGBSurface( SDL_HWSURFACE, 屏幕->w, 屏幕->h, 屏幕->格式->BitsPerPixel,

屏幕->格式->Rmask3D交通工具

屏幕->格式->Gmask,

屏幕->格式->Bmask,

屏幕->格式->Amask);

// 这是种子图像,一旦启动,它将呈螺旋状

Image = SDL_LoadBMP("tunnel_map.bmp");

图像 = SDL_ConvertSurface(图像, 屏幕->格式, SDL_HWSURFACE);

rBuffer.x = 0;

rBuffer.y = 0;

rBuffer.w = bBuffer->w;

rBuffer.h = bBuffer->h;

// 忽略大多数事件独立开发游戏引擎,包括鼠标移动,并取消光标

SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);

SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);

SDL_ShowCursor( SDL_DISABLE );

隧道.Set( 320, 240 ); // 通道将填充整个缓冲区

隧道.Precalc(16); //内圆直径

while (SDL_PollEvent(NULL)==0) {

浮动 fTime = Tunnel_GetTime();

//修改之前必须锁定表面独立开发游戏引擎,特别是当缓冲区位于图形硬件内存中时

SDL_LockSurface(bBuffer);

SDL_LockSurface(图像);

Tunnel.Draw(bBuffer, 图像, 180*sin(fTime), fTime*100);

SDL_UnlockSurface(bBuffer); // 更新后即可解锁

SDL_UnlockSurface(图像);

// 将缓冲区中的数据输出到屏幕绘图区域并强制重绘

SDL_BlitSurface( bBuffer, NULL, screen, &rBuffer );

SDL_UpdateRect(屏幕, 0, 0, 0, 0);

隧道.Free();

图 2. 展示旋转和扭曲的 2D 通道

4.其他游戏引擎的探索

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

a) ALLEGRO(Allegro底层游戏开发例程)

Allegro 是一个开源、可移植的库,主要针对视频游戏和多媒体编程。 Allegro 由 Shawn Hargreaves(最近称为 Climax)创建,现已发展成为能够跨越许多操作系统(例如 Linux、Windows、MacOS、MS-DOS 和许多其他流行平台)的游戏系统。

除了拥有先进的 2D 图形库之外,它还可以轻松访问鼠标、键盘、操纵杆和高精度定时器中断。 Allegro 不会包装或取代 OpenGL,但通过访问其广泛的开发站点 (),您可以了解如何将 OpenGL 集成到 Allegro 游戏程序中。

Allegro 发布了大约 700 个不同的游戏项目,其中最突出的两个类别是街机游戏和益智游戏。 我特别喜欢经典街机游戏 Zaxxon 的重制版(见图 3)。

图 3. 酷炫 Zaxxon 的翻版

b) Irrlicht:点燃快速实时 3D 引擎

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

图 4. Irrlicht 中非常真实的场景

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

ClanLib 为编写游戏提供了一个独立于平台的接口 - 它们具有与 DirectX 和 OpenGL 等低级库的通用接口。 使用ClanLib,您只需编写少量代码即可在Windows、Linux和OSX系统上开发游戏程序。 ClanLib 包括广泛的声音库、2D 碰撞检测、动画、GUI 框架和网络库。 图 5 显示了游戏 XenoHammer 中的场景。

图 5.XenoHammer 屏幕截图

发表于@ 二月 22, 2006 12:05 PM |

文章来源:https://blog.csdn.net/skyremember/archive/2008/09/17/3172788.aspx