游戏引擎设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
▲ 2004. C E
·45·
Computer Era No. 8 2006
复杂度。适合于用二维表存储的场景,表的每个项,保存着相应 的对象信息。我们可以通过一个简单的算法,由当前的鼠标位 置得到表的索引,然后直接读取索引对应的项就完成了选取。 在固定视角的 3D 游戏甚至非固定视角的 3D 游戏中,也可以 使用这种方法,但是它只能是按二维表,或者多层二维表排布 的。这种方法对内存空间的需求比较大。
虽然选取的方法很多,但是每种方法都有其固有的优缺 点。由于场景千变万化,复杂纷繁,为了能适应实际的需求,以 上的方法可以组合使用,从而扬长避短,更好地满足需求。
2 游戏引擎原理
游戏引擎是一个为运行某一类游戏的机器设计的能够被 机器识别的代码( 指令)集合。它像一个发动机,控制着游戏的 运行。一个游戏作品可以分为游戏引擎和游戏资源两大部分, 列一个公式就是:游戏 = 引擎( 程序代码)+ 资源( 图像、声音、 动画等)。游戏资源包括图像、声音、动画等部分,游戏引擎则是 按游戏设计的要求顺序调用这些资源。
R (Z )=alpha*R (Y )+(1-alpha)*R (X ) G (Z )=alpha*G (Y )+(1-alpha)*G (X ) B (Z )=alpha*B (Y )+(1-alpha)*B (X ) R (x)、G (x)、B (x)分别指颜色 x 的 R G B 分量原色值。从上面的公 式可以知道,A lpha 其实是一个决定混合透明度的数值。 3.4 控制活物移动的算法 在游戏中使用鼠标控制物体的运动,而且让其走最短的路 径到达目标位置,这就要用到最短路径搜索算法即 A * 算法了。 A * 算法实际是一种启发式搜索方法,它利用估价函数评估每次 决策的价值,决定先尝试哪一种方案。A * 算法的估价函数可表 示为:f(n)=g(n)+h(n)。这里,f(n)是节点 n 的估价函数,g(n)是起点 到终点的最短路径值,h(n)是 n 到目标的最短路经的启发值。
2002.6:72 ̄ 74
end choose
[2] 李蓉蓉.基于 IC 卡的机房管理信息系统.龙岩学院学报,2005.23(3):
当在服务器端设置好客户端的 IP 地址,并绑定好客户端主
30 ̄32
机的端口号后,就与客户端建立了连接,服务器与客户端就随时 [3] 苗专生.基于 W insock 的机房计费管理系统的设计与实现.荆门职
⑷ 映射法 是效率最高的一种算法,可以达到 O ⑴的时间
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
This .Obje ct.Ge tDa ta (REF ls _Re cvDa ta )
启“、logoff"”表示注销“、shutdow n”表示关机“、lock”表示锁屏、
3 开发工具与主要技术
3.1 引擎开发工具 目前市场上游戏开发工具包罗万象,在不同游戏平台上有
不同的开发工具。对于 PC 机,目前流行的软件开发工具有:C , C ++,V C ++,D elphi,C ++ B uilder等。由于 W indow s 操作系统的 普及和其强大的多媒体功能,越来越多的游戏支持 W indow s 操 作系统。由于 V C 是微软的产品,用它来编写 W indow s 程序有 强大的程序接口和丰富的开发资源的支持,加之 V C 严谨的内 存管理,在堆栈上良好的分配处理和生成代码体积小稳定性高 的优点,所以 V C ++ 成为目前游戏的主流开发工具。 3.2 Windows 控件的认识
应用透明混合技术,可以实现游戏中的许多特效,比如火 光、烟雾、阴影、动态光源等半透明效果。在开发游戏中为了达
到光影或图像的透明效果大多会采用透明混合技术( 即 A lpha B lend)。所谓透明混合技术,就是按照透明度的值来混合源像 素和目标像素,达到半透明效果。计算机中图像是用 R (红色),G (绿色),B (蓝色)三原色来表示的,假设一幅图像是 X ,另一幅透 明的图像是 Y ,透过 Y 去看 X ,看到的图像 Z 就是 X 和 Y 的混 合图像。假设 Y 图像的透明度值为 alpha(取值为 0 ̄1,0 为完全 透明,1 为完全不透明),alpha 混合公式如下:
0 引言
游戏作为最流行的娱乐工具,已经在社会上获得广大爱好 者的认可。中国作为世界上最大的游戏市场,每年的游戏产业 已经达到几百亿的规模。但是国产游戏却占有极少的市场份 额,很大部分是从国外引进的。当然这和中国的游戏产业的发 展历史是有关系的。本文将对 G A M E 引擎( 游戏软件的重要组 成部分,也是最关键的部分)的开发技术进行介绍。
1 角色对象的选取
鼠标是游戏控制中的重要工具,应该说是必不可少的。如 何由鼠标的位置判定其下的对象是什么,是游戏开发过程中必 须解决的问题。下面讨论几种常用方法。
⑴ 框选法 对游戏中的每个对象创建一个伴随的矩形框,通 过遍历所有可见对象,根据鼠标坐标点落在某个矩形框内来判定 鼠标选取的对象。这种方法简单,算法容易理解,当使用矩形包围 框,而对象数量又比较有限的时候,效率也是很好的。缺点是选取 不够精确,无法对对象的细节做选取。
⑵ 列举法 这是效率最低的方法之一。和矩形框法类似,
它也需要遍历所有可见对象,但是由于缺少包围盒机制,只能 检测对象位于鼠标下的那个位置是否有有效像素,或者有效 的 alpha 值。一般先使用方法 1 减少遍历对象的数量之后,再 使用这个方法达到精确的选取。
⑶ 反射法 此种方法相对有效和快捷,尤其是在 3D 游戏 中,有无可比拟的优越性。反馈法的实现很简单:首先要维护一 个后台缓冲区,当绘制目标对象的时候,同时将对象的可见信 息(一般是对象图片的 A lpha 值,或者 Z 值) 写入后台缓冲,然 后检测鼠标对应的缓冲区的位置的值是否有变化,如果变化 了,表明刚才绘制的对象可以被鼠标选中。当缓冲使用了 Z 运 算的时候,在绘制完成之后,就可以得到一个鼠标可以选取的 对象列表,只要根据一定的原则从列表中提取需要的对象。这 个机制在 2D 下,一般不维护额外的缓冲区而直接使用绘图缓 冲区。3D 下,像 O penG L 提供了内置的反馈方法,更方便了用 户的使用。实际也可以利用 Z buffer、模板缓冲等实现类似的机 制。这种方法可以实现精确到像素级的选取,而几乎不影响运 行效率。缺点是需要对绘制部分的代码有很高的控制权限。
4 结束语
根据上述思想和技术,我们利用 Pow erB uilder和 V isualB asic 设计开发“了 ID 卡机房智能管理系统”,大胆地整合了两种工具的
ca s e "lock"
开发特色,缩短了开发周期。通过一年的使用,系统运行稳定,计时
ope n(w_pm) // 锁屏
收费准确无误,达到了机房管理自动化和无人值守的目的,提高了
计算机时代 2006 年 第 8 期
·44·
游戏引擎设计
王风 (江苏信息职业技术学院计算机工程系, 江苏 无锡 214000)
摘 要: 介绍了游戏引擎的开发工具、开发技术以及游戏制作过程。 关键词: Game Role; 框选法; 列举法; 反射法; 映射法; 引擎( Engine) ; DirectX; 透明混合算法; 多任务处理
每当游戏回到前台,程序员不得不重画游戏窗口。W indow s 并不负责记忆它所覆盖或隐藏的窗口的内容;它所能做的最多 是通知一个窗口需要重画其客户区域。事实上,M oby D ick W indow s 并不恢复自己的窗口。我们来看看 M oby D ick D O S 的循环是如何实现的。下面的程序实现以下的循环任务:检查有 什么东西要移动,移动它,显示结果。
W indow s 系统有一个主要优点是应用程序和设备之间的 独立性,然而应用程序的设备无关性是通过牺牲部分速度和效 率得到的。W indow s 在硬件和软件间添加了中间抽象层,通过 这些中间层我们的应用程序才能在不同的硬件上游刃有余。然 而我们不能完全利用硬件的特征来获取最大限度的运算和显 示速度,这一点在编写 W indow s 游戏时是致命的。D irectX 便是 为解决这个问题而设计的。D irectX 由快速的底层库组成并且 没有给游戏设计添加过多的约束。微软的 D irectX 软件开发工 具包( SD K)提供了一套优秀的应用程序编程接口( A PIs),这些 编程接口可以提供高质量开发工具、实时应用程序所需要的各 种资源。D irectX 的组件分别是:D irectD raw 使用页面切换的方 法实现动画,它不仅可以访问系统内存,还可以访问显示内存; D irect3D 提供了 3D 硬件接口;D irectSound 提供立体声和 3D 声音效果,同时管理声卡的内存;D irectPlay 支持开发多人网络 游戏,并能处理游戏中网络之间的通信问题;D irectInput为大量 的设备提供输入支持;D irect Setup 自动安装 D irectX 驱动程 序;音乐播放的 D irectM usic。 3.3 透明混合技术
while (!ga me done ) { // 调用时间程序 - 如果时间未到, 则没有任何响应。
Aha b Move d = Move Aha b(); // 仅当 Aha b 没有移动时移动 Moby Dick。
if (!Aha b Move d) { Move Moby(百度文库; // 如果有任何一个移动, 更新屏幕, 并检查是否
ca s e "s hutdown" ole _2.obje ct.s hut(5) // 强制关机
ca s e "logoff" ole _2.obje ct.s hut(0) // 注销
件,根据约定的字符串的意义,执行相应的功能,比如收到 “ lock” 消息,客户端自动锁定屏幕,以此实现远程控制。
[MobyX][MobyY])) { ga me done = 1; cprintf("\a ");
cprintf("You win!"); } if (Time s Up <= 0) { cprintf("\a "); cprintf("Time 's up!"); ga me done ="1;" } if (ra w_ke y="=" MAKE_ES C)
4 游戏运行中的多事件处理
当游戏进入后台后,其执行不得不被挂起( 可以在 M oby D ick W indow s 中使用 “ 中止的”变量观察它是如何工作的)。如 果是一个实时游戏,程序员当然希望它被悬挂。但在回合制游 戏中,当玩家去做其它事情时,程序员可能不希望计算机一方 作任何动作,但希望后台的人工智能( A I)运算依旧执行。
有胜利和失败。 if ((MobyX != OldMobyX) || (MobyY != OldMobyY) ||
(Aha bMove d)) { Upda te S cre e n(); } if ((MobyX == Aha bX) && (MobyY == Aha bY)&&(pa inte d
ca s e "unlock"
工作效率,节约了资源,大大减轻了机房管理人员的工作负担。
clos e (w_pm) // 解屏 CAS E ELS E
参考文献: [1] 胡声洲, 刘建华. 计算机房管理系统研究. 赣南师范学院学报,
me s s a ge box(" 友情提示 ",ls _Re cvDa ta )
可以通过 SendD ata 方法进行数据通信,完成对客户端的实时控 制和监控。由于 W insock 控件每次只能发送一个字符串,我们对 发送的字符串进行了实际意义的确定,如“ reboot”表示强制重
业技术学院学报,2005.20(3):22 ̄ 25 [4] 马贵安等.P ow erB uilder W in32 A P I程序设计. 清华大学出版社,
choos e ca s e ls _Re cvDa ta
“ unlook”表示解屏等。客户端收到字符串后触发 D ataA rrival事
ca s e "re boot" //ole _2 为 vb 开发的 s hutd.ocx 控件 ole _2.obje ct.s hut(3) // 强制重启
相关文档
最新文档