设为主页 | 加入收藏 | 繁體中文

简述角色扮演游戏引擎的设计原理

  脚色扮演游戏(RPG)是深受宽大游戏迷们喜好的一种游戏, 它以奇特的互动性和故事性吸引了无数的玩家。它向人们提供了凌驾现实生活的辽阔的虚拟世界,使人们能够实验扮演差别的脚色,去履历和体验各种差别的人生路程或奇幻履历。这些体验都是在现实生活中无法实现的。在玩过很多游戏后,很多玩家都不再仅仅满足于一个游戏玩家的身份,而会思索游戏是怎样制造的,并且计划制造一个本身的游戏,网上的各种游戏制造小组更是如雨后春笋般涌现。上面我就给大家先容一下脚色扮演游戏引擎的原理与制造,希望能对游戏制造爱好者有所资助。
  一 游戏引擎的原理
  说到引擎,游戏迷们都很熟悉。游戏引擎是一个为运行某一类游戏的呆板设计的能够被呆板识别的代码(指令)聚集。它象一个发起机,控制着游戏的运行。一个游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图象,声响,动画等部分,列一个公式便是:游戏=引擎(程序代码)+资源(图象,声响,动画等)。游戏引擎则是按游戏设计的要求顺序的调用这些资源。
  二 脚色扮演游戏的制造
  一个完整的脚色扮演游戏的制造从大的分工来说可以分为:筹谋,程序设计,美工,音乐制造以及项目办理,后期的测试等。
  筹谋主要任务是设计游戏的剧情,类型以及模式等,并阐发游戏的庞大性有多大,内容有几多,筹谋的进度要多快等要素。
  程序设计的任务是用某种编程语言来完成游戏的设计,并与筹谋共同,到达预期的目的。
  美工主要是根据游戏的期间配景与主题设计游戏的场景及各种脚色的图象。
  音乐制造是根据游戏的剧情和配景制造游戏的音乐与音效。
  项目办理主要是控制游戏制造的进程,充分使用现有的资源(职员,资金,设备等),以到达用只管即便少的资金实现最大的收益。
  后期的测试也黑白常紧张的一个关键,对付一个几十人耗费几个月乃至是几年时间制造的游戏,测试往往能找到很多问题,只有革新程序才能确保游戏的安全刊行。
  由于文章主要是讲解游戏程序的制造的,以是筹谋,美工,音乐制造等方面请读者参考其它文章,上面我就讲讲游戏程序的设计。
  (一) 开发东西与主要技能
  1.件开发东西
  游戏程序开发东西有很多,在差别游戏平台上有差别的开发东西。在小我私家盘算机上,可以用如今流性的软件开发东西,比如:C,C++,VC++,Delphi,C++ Builder等。由于Windows操纵系统的遍及和其强大的多媒体功效,越来越多的游戏支持Windows操纵系统。由于VC是微软的产物,用它来编写Windows程序有强大的程序接口和丰富的开发资源的支持,加之VC严谨的内存办理,在堆栈上精良的分配处理,生成代码的体积小,稳定性高的优点,以是VC++就成为如今游戏的主流开发东西。
  2.DirectX组件的知识
  谈到Windows系统下的游戏开发,我们就要说一下微软的DirectX SDK。
  Windows系统有一个主要优点是应用程序和设备之间的独立性。但是应用程序的设备有关性是通过捐躯部分速度和服从的到的,Windows在硬件和软件间添加了中心笼统层,通过这些中心层我们的应用程序才能在差别的硬件上游刃有余。但是,我们因而而不克不及完全使用硬件的特性来获取最大限度的运算和表现速度。这一点在编写Windows游戏时是致命的,DirectX便是为办理这个问题而设计的。DirectX由快速的底层库组成并且没有给游戏设计添加过多的束缚。微软的DirectX软件开发东西包(SDK)提供了一套良好的应用程序编程接口(APIs),这个编程接口可以提提供你开发高质量、及时的应用程序所需要的各种资源。
  DirectX的6个组件辨别是:
  DirectDraw: 使用页面切换的要领实现动画,它不但可以拜访系统内存,还可以拜访表现内存。
  Direct3D: 提供了3D硬件接口。
  DirectSound: 平面声和3D声响效果,同时办理声卡的内存。
  DirectPlay: 支持开发多人网络游戏,并能处理游戏中网络之间的通讯问题。
  DirectInput: 为大量的设备提供输入支持。
  DirectSetup: 自动安装DirectX驱动程序。
  随着DirectX版本的进步,还增长了音乐播放的DirectMusic。
  3.AlphaBlend 技能
  如今很多游戏为了到达光影或图象的透明效果都市接纳AlphaBlend 技能。所谓AlphaBlend技能,实在便是根据"Alpha"混合向量的值来混合源像素和目标像素,一样平常用来处理半透明效果。在盘算机中的图象可以用R(赤色),G(绿色),B(蓝色)三原色来表现。假设一幅图象是A,另一幅透明的图象是B,那么透过B去看A,看上去的图象C便是B和A的混合图象,设B图象的透明度为alpha(取值为0-1,0为完全透明,1为完全不透明),Alpha混合公式如下:
  R(C)=alpha*R(B)+(1-alpha)*R(A)
  G(C)=alpha*G(B)+(1-alpha)*G(A)
  B(C)=alpha*B(B)+(1-alpha)*B(A)
  R(x)、G(x)、B(x)辨别指颜色x的RGB重量原色值。从上面的公式可以晓得,Alpha实在是一个决定混合透明度的数值。应用Alpha混合技能,可以实现游戏中的很多殊效,比如火光、烟雾、暗影、动态光源等半透明效果。
  4.A*算法
  在很多游戏中要用鼠标控制人物活动,并且让人物从如今的地位走到目标地位应该走最短的路径。这就要用到最短路径搜索算法即A*算法了。
  A*算法现实是一种启发式搜索,所谓启发式搜索,便是使用一个估价函数评价每次的的决议计划的价值,决定先实验哪一种方案。要是一个估价函数可以找出最短的路径,我们称之为可采取性。A*算法是一个可采取的最好优先算法。A*算法的估价函数可表现为:
  f(n) = g(n) + h(n)
  这里,f(n)是节点n的估价函数,g(n)是起点到尽头的最短路径值,h(n)是n到目标的最断路经的启发值。由于A*算法比力庞大,限于篇幅,在此简略先容一下,具体实际朋侪们可以看人工智能方面的书籍了解详细的环境。
  其它技能还有粒子系统,音频与视频的调用,图象文件的款式与信息存储等,大家可以在学好DirectX的底子上逐渐学习更多的技能。
  (二)游戏的具体制造
  1.地图编辑器的制造
  RPG游戏往往要有大量的场景,场景中根据需要可以有草地,湖泊,树木,衡宇,家具等道俱,由于一个游戏需要很多场景且地图越来越大,为了节流空间,进步图象文件的可重用性,RPG游戏的画面接纳很多反复的单元(可以叫做"图块")所组成的,这就要用到地图编辑器了。我们在制造游戏引擎前,要完成地图编辑器的制造。在 RPG游戏里,场景的组成,是图块分列顺序的记载。首先订定一个场景组成文件的款式,在这个文件里记载组成场景所需要的图块的分列顺序,由于我们曾经为每个图块创建了索引,以是只需要记载这些索引就可以了。一个场景的组成,是分成几层来完成的:空中,建筑和植物,家具部署,和在场景中活动的人物或者物体(比如飘荡的旗帜),根据肯定的顺序把它们顺次表现到屏幕上,就形成了一个丰富多采的场景。我们可以用数组来表现地图场景的生成历程。
  MapData[X][Y]; //地图数据,X表现地图宽度,Y表现地图高度
  Picture[num]; //道具的图片,num表现道具的总数
  void MakeBackGround() //生成场景函数
  {
  int n;
  for( int i=0; i   for( int j=0; j   {
  n=MapData[ i ][ j ]; //获得该地位的道具编号
  Draw( j*32, i*32, Picture[n]); //在此地位(j*32,i*32)画道具
  }
  } 
  2.游戏的模块的辨别
  游戏按功效分为:音讯处理系统、场景表现及行走系统、打斗系统三大主要部分。其中又以音讯处理系统为核心模块,其余部分紧紧围绕它运行。
  一:音讯处理系统
  音讯处理系统是游戏的核心部分。游戏用到的音讯处理系统先等待音讯,然后根据收到的音讯转到相应的函数进行处理。比如:配角碰到仇人后,我们就让程序产生‘打斗音讯',音讯处理系统收到这个音讯后就会马上转到打斗模块中去。音讯处理的大要框架如下:
  //定义程序中要用到的变量
  DWORD Message; //音讯变量
  WinMain() //进入程序
  { 初始化主窗口;
  初始化DirectDraw环境,并调入程序需要的图形、地图数据;
  while( 1 ) //音讯循环
  { switch( Message )
  { case 行走音讯: 行走模块();
  case 打斗音讯: 打斗模块();
  case 事件音讯: 事件模块();
  }
  }
  } 
  二:场景表现及行走系统
  作为RPG游戏,其所有事件的发生几乎都是和场景有关,比方:差别的中央会碰到差别的仇人、与差别的人对话得知差别的事变等。鉴于这部分的紧张性,我们可再将它辨别为:配景表现、行走 和 事件发生 三个子模块,辨别处理各自的功效。上面进行具体阐发。
  (一)配景表现
  程序运行后,先读取前面地图编辑器制造的场景所需要的图块的分列顺序,根据分列顺序将图象拼成一个完整的场景,一样平常做法是:在内存中开发一到两个屏幕缓存区,事先把即将表现的图象数据准备在缓存区内,然后一次性搬迁:把它们传送到真正的屏幕缓冲区内。
  游戏用到的图片则事先制造好并存于别的的图形文件中。地图编辑器制造的场景文件仅仅是对应的数据,而不是真正的图片。在游戏中生成场景便是地图编辑的逆历程,一个是根据场景生成数据,而另一个是根据数据生成场景。
  (二)行走
  要让配角在场景中行走,至少要有上、下、左、右四个行走方向,每个方向4幅图(站立、迈左腿、迈右腿、迈左腿),如图:游戏中肯定要将图片的配景设为透明,如许在画人物的时候就不会覆盖上配景致了(这一技能DirectDraw中只要用SetColorKey()函数将原图片配景致过滤掉就行了)。我们让配角地位不动,而使场景移动,即接纳滚屏技能来实现脚色在场景上移动。如许脚色不停连结在屏幕的正中心,需要做的事变只是根据行走方向和步调不停变更图片而已。行走时的障碍物果断也是每一个场景中必定要有的,有一些道具如树木、衡宇等是不可超过的。对此我主要用一个二维数组来对应一个场景,每一个数组值代表场景的一小格(见图3)。有障碍的中央,该数组的对应值为1,可通过的中央的值为0。
  (三)事件发生
  事件发生原理便是把相应事件的序号存储在地图的某些格子中,当配角一踏入这个格子就会触发对应事件。比方:在游戏开端时,配角是在他的家里。他要是想出去的话,就需要执行场景切换这个处理函数。我们假定该事件的编号为001,那么在地图上把家门外路口处的格子值设为001。如许配角走到路口时,编号为001的场景切换函数就会被触发,于是配角便到了下一个场景中。程序具体如下:
  void MessageLoop( int Msg ) //音讯循环
  {
  switch( Msg )
  {
  char AddressName[16]; //数组AddressName[16]用来存储配角所在所在的称号
  case ADDRESS == 001: // 由ADDRESS的值决定场景值(出门)
  ScreenX=12; ScreenY=0; //初始化游戏配景地位
  Hero.x=360; Hero.y=80;//配角坐标
  Move();//配角移动函数
  //以下程序用来表现配角所在所在
  sprintf(AddressName,"下一幅游戏场景的称号");
  PrintText(lpDDSPrimary, 280, 330,AddressName , RGB(255,255,255));//在屏幕上表现出场景的称号
  break;
  }
  } 
  三:打斗系统
  绝大多数的RPG都是有战役存在的,因而,打斗系统就成为RPG系统中很紧张的一环。有不少RPG游戏接纳回合制打斗方式,由于实现起来较为简略。和打斗紧密相干的是升级,通常在一场战役竣事后,配角的履历值都市增长。而当履历值到达肯定水平时,脚色就升级了。
  上面我扼要的先容了脚色扮演游戏的制造,由于写这篇文章的目的是让读者对脚色扮演游戏的制造有一个根本的了解,以是读者朋侪们可以研讨相干资料。
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: