二维图像引擎

二维图像引擎（以下简称引擎）是主要使用在二维游戏中，绘制图像，并向外部表达图像的系统。在三维游戏中，亦有使用二维引擎来绘制游戏界面以及一些二维元素。

历史

概述
一般来说，一套引擎可以使用在多个不同的游戏中，即“可重用性”，由于引擎研发的投资较大，一个商业公司往往开发一款引擎，反复用于多款游戏，从而获得较高利润。如大宇公司的《轩辕剑系列》其正传和外传就是采用同一款引擎开发。也有本身不制作游戏，专门开发引擎并出售的公司。这样的引擎也称作“商业引擎”。出于游戏开发周期和开发成本的考虑，一些商业游戏公司更愿意购买“商业引擎”。

游戏引擎的程序基础是建立在使用图形API函数基础之上的，而不是直接控制显卡，主要适用于2D图像的API是DirectX，而纯2D图形API往往不能提供更丰富的图像操作支持，一些引擎也使用用于3D图像的API如OpenGL，Direct3D等来模拟2D。

引擎组成
由于二维游戏的图像都是平面结构，所以图像引擎在显示图像之前也往往只对图像本身进行处理，而不像三维游戏那样还要处理图像周围的环境。这种处理一般是将图像伸缩，变形，色彩处理，图像合成等。图像引擎还可分为以下几个部分。

角色图像
在二维游戏中，角色的动作是靠一系列由美工预先设计好的图像，按照一定的速率连续显示来实现。就像播放电影的方法一样。而考虑到角色移动带有方向性，角色的一种动作往往要以不同的方向绘制许多组。在早期DOS游戏中，为了节约资源，角色动作往往只有四个方向，而后来的RPG游戏则往往是八个方向，或十二个方向。方向的多少影响着角色动作的流畅度，也极大的影响游戏占用资源的多少。一种缓和的办法是采用“纸娃娃系统”。

场景地图

场景地图是承载全部游戏内容的场所。引擎对付地图的办法大致可分为两种：整版式和贴图式。前者是直接将整张图像作为地图来显示，这样的好处是美工可以针对不同的场景单独绘制不同的地图，但由于地图的不可拆分性，整版式地图也是最占用资源的。后者贴图式则正是针对前者的劣势，在贴图式地图中，美工并不直接绘制地图，而是绘制许多细小的地图元素，如一块草地，一个池塘，一棵树等，并在此之后，将数量一定的元素组合併接成完整地图。这种解决办法的劣势就是场景变化度不高，容易出现完全相同的区域。

在贴图式场景地图系统中，每个地图都是由一个贴图方阵组成，根据单个贴图的形状，可以将贴图式地图分为90°和45°和30°地图三种。90°的贴图单元成矩形，一些早期DOS游戏都是这种；45°的贴图单元成正方形，一些早期RPG多用此种，如《网络创世纪》；30°则是菱形，是时下比较流行的一种。三者相比起来，30°表现的场景最为自然。然而一些采用90°贴图的游戏有意将建筑，设施等图像倾斜绘制，模拟30°贴图的画面效果，如《传奇》。

一般，引擎习惯将角色固定在屏幕正中央，并移动场景来实现角色行动的效果。这种效果也称“地图卷动”。

动态&光影
在二维游戏中，或多或少的会使用一些特殊的效果，如图像的淡入淡出，颜色的加强等。游戏引擎中，一般有专门的系统负责处理图像，由于这部分代码比较常用且运算量大，好的引擎多用ASM语言书写代码。

此外，游戏中的特效，如火焰，魔法技能，流水等都是引擎需要处理的内容。

其他技术

脏矩形技术（Dirty Rectangle）
在2D游戏中，每次更新屏幕，都将会将整个屏幕上的图像重新绘制一遍，而更新的内容往往不是很多，甚至只是一个小区域，强制重绘带来了很大的资源浪费，尤其是在一些休闲游戏、桌面游戏中体现明显。脏矩形技术正是利用只更新变化区域来达到提高引擎效率的目的。在脏矩形系统中，屏幕上更新的区域被称为“脏矩形”，引擎仅仅将脏矩形部分重绘，而其他部分保持原样。

alpha混合
由于2D游戏的平面性，导致一个物体对另一个物体时有覆盖的情况。被覆盖的物体则不可见，可能给玩家带来不便。通常，游戏开发者会将一部分被遮盖的物体进行透明化处理。这种透明化算法被称为“alpha混合”，混合的对象主要是角色图像，以便让玩家知道被遮挡的角色身在何处。

此外，引擎在处理一些火焰，流水时，也常常使用透明化算法，使之更为真实。

图像压缩
在2D游戏中，图像是游戏中最大的资源，而开发者为了压缩游戏所占的空间大小，往往在图像压缩上大作文章。被压缩后的图像，经过归类，被放置在一个个“打包文件”中，通常，这些文件以.lib .pak作为文件名后缀。

参见
 三维图像引擎
 纸娃娃系统
 游戏引擎

参考文献

外部链接

游戏引擎
電子遊戲研發