知识大全 详述RPG游戏引擎的设计原理
Posted 知
篇首语:任何人的知识不可能超过他自己的经验。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 详述RPG游戏引擎的设计原理相关的知识,希望对你有一定的参考价值。
详述RPG游戏引擎的设计原理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
角色扮演游戏(RPG)是深受广大游戏迷们喜爱的一种游戏 它以独特的互动性和故事性吸引了无数的玩家 它向人们提供了超出现实生活的广阔的虚拟世界 使人们能够尝试扮演不同的角色 去经历和体验各种不同的人生旅程或奇幻经历 这些体验都是在现实生活中无法实现的 在玩过许多游戏后 许多玩家都不再仅仅满足于一个游戏玩家的身份 而会思考游戏是如何制作的 并且打算制作一个自己的游戏 网上的各种游戏制作小组更是如雨后春笋般涌现 下面我就给大家介绍一下角色扮演游戏引擎的原理与制作 希望能对游戏制作爱好者有所帮助一 游戏引擎的原理
说到引擎 游戏迷们都很熟悉 游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合 它象一个发动机 控制着游戏的运行 一个游戏作品可以分为游戏引擎和游戏资源两大部分 游戏资源包括图象 声音 动画等部分 列一个公式就是 游戏=引擎(程序代码)+资源(图象 声音 动画等) 游戏引擎则是按游戏设计的要求顺序的调用这些资源
二 角色扮演游戏的制作
一个完整的角色扮演游戏的制作从大的分工来说可以分为 策划 程序设计 美工 音乐制作以及项目管理 后期的测试等
策划主要任务是设计游戏的剧情 类型以及模式等 并分析游戏的复杂性有多大 内容有多少 策划的进度要多快等因素
程序设计的任务是用某种编程语言来完成游戏的设计 并与策划配合 达到预期的目的
美工主要是根据游戏的时代背景与主题设计游戏的场景及各种角色的图象
音乐制作是根据游戏的剧情和背景制作游戏的音乐与音效
项目管理主要是控制游戏制作的进程 充分利用现有的资源(人员 资金 设备等) 以达到用尽量少的资金实现最大的收益
后期的测试也是非常重要的一个环节 对于一个几十人花费几个月甚至是几年时间制作的游戏 测试往往能找到许多问题 只有改进程序才能确保游戏的安全发行
由于文章主要是讲解游戏程序的制作的 所以策划 美工 音乐制作等方面请读者参考其它文章 下面我就讲讲游戏程序的设计
(一) 开发工具与主要技术
.件开发工具
游戏程序开发工具有很多 在不同游戏平台上有不同的开发工具 在个人计算机上 可以用目前流性的软件开发工具 比如 C C++ VC++ Delphi C++ Builder等 由于Windows操作系统的普及和其强大的多媒体功能 越来越多的游戏支持Windows操作系统 由于VC是微软的产品 用它来编写Windows程序有强大的程序接口和丰富的开发资源的支持 加之VC严谨的内存管理 在堆栈上良好的分配处理 生成代码的体积小 稳定性高的优点 所以VC++就成为目前游戏的主流开发工具
.DirectX组件的知识
谈到Windows系统下的游戏开发 我们就要说一下微软的DirectX SDK
Windows系统有一个主要优点是应用程序和设备之间的独立性 然而应用程序的设备无关性是通过牺牲部分速度和效率的到的 Windows在硬件和软件间添加了中间抽象层 通过这些中间层我们的应用程序才能在不同的硬件上游刃有余 但是 我们因此而不能完全利用硬件的特征来获取最大限度的运算和显示速度 这一点在编写Windows游戏时是致命的 DirectX便是为解决这个问题而设计的 DirectX由快速的底层库组成并且没有给游戏设计添加过多的约束 微软的DirectX软件开发工具包(SDK)提供了一套优秀的应用程序编程接口(APIs) 这个编程接口可以提供给你开发高质量 实时的应用程序所需要的各种资源
DirectX的 个组件分别是
DirectDraw 使用页面切换的方法实现动画 它不仅可以访问系统内存 还可以访问显示内存
Direct D 提供了 D硬件接口
DirectSound 立体声和 D声音效果 同时管理声卡的内存
DirectPlay 支持开发多人网络游戏 并能处理游戏中网络之间的通信问题
DirectInput 为大量的设备提供输入支持
DirectSetup 自动安装DirectX驱动程序
随着DirectX版本的提高 还增加了音乐播放的DirectMusic
.AlphaBlend 技术
现在许多游戏为了达到光影或图象的透明效果都会采用AlphaBlend 技术 所谓AlphaBlend技术 其实就是按照 Alpha 混合向量的值来混合源像素和目标像素 一般用来处理半透明效果 在计算机中的图象可以用R(红色) G(绿色) B(蓝色)三原色来表示 假设一幅图象是A 另一幅透明的图象是B 那么透过B去看A 看上去的图象C就是B和A的混合图象 设B图象的透明度为alpha(取值为 为完全透明 为完全不透明) Alpha混合公式如下
R(C)=alpha*R(B)+( alpha)*R(A)
G(C)=alpha*G(B)+( alpha)*G(A)
B(C)=alpha*B(B)+( alpha)*B(A)
R(x) G(x) B(x)分别指颜色x的RGB分量原色值 从上面的公式可以知道 Alpha其实是一个决定混合透明度的数值 应用Alpha混合技术 可以实现游戏中的许多特效 比如火光 烟雾 阴影 动态光源等半透明效果
.A*算法
在许多游戏中要用鼠标控制人物运动 而且让人物从目前的位置走到目标位置应该走最短的路径 这就要用到最短路径搜索算法即A*算法了
A*算法实际是一种启发式搜索 所谓启发式搜索 就是利用一个估价函数评估每次的的决策的价值 决定先尝试哪一种方案 如果一个估价函数可以找出最短的路径 我们称之为可采纳性 A*算法是一个可采纳的最好优先算法 A*算法的估价函数可表示为
f(n) = g(n) + h(n)
这里 f(n)是节点n的估价函数 g(n)是起点到终点的最短路径值 h(n)是n到目标的最断路经的启发值 由于A*算法比较复杂 限于篇幅 在此简单介绍一下 具体理论朋友们可以看人工智能方面的书籍了解详细的情况
其它技术还有粒子系统 音频与视频的调用 图象文件的格式与信息存储等 大家可以在学好DirectX的基础上逐渐学习更多的技术
(二)游戏的具体制作
.地图编辑器的制作
RPG游戏往往要有大量的场景 场景中根据需要可以有草地 湖泊 树木 房屋 家具等道俱 由于一个游戏需要很多场景且地图越来越大 为了节省空间 提高图象文件的可重用性 RPG游戏的画面采用很多重复的单元(可以叫做 图块 )所构成的 这就要用到地图编辑器了 我们在制作游戏引擎前 要完成地图编辑器的制作 在 RPG游戏里 场景的构成 是图块排列顺序的记录 首先制定一个场景构成文件的格式 在这个文件里记录构成场景所需要的图块的排列顺序 因为我们已经为每个图块建立了索引 所以只需要记录这些索引就可以了 一个场景的构成 是分成几层来完成的 地面 建筑和植物 家具摆设 和在场景中活动的人物或者物体(比如飘扬的旗帜) 按照一定的顺序把它们依次显示到屏幕上 就形成了一个丰富多采的场景 我们可以用数组来表示地图场景的生成过程
MapData[X][Y] //地图数据 X表示地图宽度 Y表示地图高度
Picture[num] //道具的图片 num表示道具的总数
void MakeBackGround() //生成场景函数
int n;
for( int i= ; i<Y; i++) //共Y行
for( int j= ; j<X; j++) //共X列
n=MapData[ i ][ j ]; //取得该位置的道具编号
Draw( j* i* Picture[n]); //在此位置(j* i* )画道具
.游戏的模块的划分
游戏按功能分为 消息处理系统 场景显示及行走系统 打斗系统三大主要部分 其中又以消息处理系统为核心模块 其余部分紧紧围绕它运行
一 消息处理系统
消息处理系统是游戏的核心部分 游戏用到的消息处理系统先等待消息 然后根据收到的消息转到相应的函数进行处理 比如 主角碰到敌人后 我们就让程序产生 打斗消息 消息处理系统收到这个消息后就会马上转到打斗模块中去 消息处理的大体框架如下
//定义程序中要用到的变量
DWORD Message; //消息变量
WinMain() //进入程序
初始化主窗口;
初始化DirectDraw环境 并调入程序需要的图形 地图数据
while( ) //消息循环
switch( Message )
case 行走消息: 行走模块();
case 打斗消息 打斗模块();
case 事件消息 事件模块();
二 场景显示及行走系统
作为RPG游戏 其所有事件的发生几乎都是和场景有关 例如 不同的地方会碰到不同的敌人 与不同的人对话得知不同的事情等 鉴于这部分的重要性 我们可再将它划分为 背景显示 行走 和 事件发生 三个子模块 分别处理各自的功能 下面进行具体分析
(一)背景显示
程序运行后 先读取前面地图编辑器制作的场景所需要的图块的排列顺序 按照排列顺序将图象拼成一个完整的场景 一般做法是 在内存中开辟一到两个屏幕缓存区 事先把即将显示的图象数据准备在缓存区内 然后一次性搬家 把它们传送到真正的屏幕缓冲区内
游戏用到的图片则事先制作好并存于另外的图形文件中 地图编辑器制作的场景文件仅仅是对应的数据 而不是真正的图片 在游戏中生成场景就是地图编辑的逆过程 一个是根据场景生成数据 而另一个是根据数据生成场景
(二)行走
要让主角在场景中行走 至少要有上 下 左 右四个行走方向 每个方向 幅图(站立 迈左腿 迈右腿 迈左腿) 如图 游戏中一定要将图片的背景设为透明 这样在画人物的时候就不会覆蓋上背景色了(这一技术DirectDraw中只要用SetColorKey()函数将原图片背景色过滤掉就行了) 我们让主角位置不动 而使场景移动 即采用滚屏技术来实现角色在场景上移动 这样角色一直保持在屏幕的正中间 需要做的工作只是根据行走方向和步伐不停变换图片而已 行走时的障碍物判断也是每一个场景中必定要有的 有一些道具如树木 房屋等是不可跨越的 对此我主要用一个二维数组来对应一个场景 每一个数组值代表场景的一小格(见图 ) 有障碍的地方 该数组的对应值为 可通过的地方的值为
(三)事件发生
事件发生原理就是把相应事件的序号存储在地图的某些格子中 当主角一踏入这个格子就会触发对应事件 例如 在游戏开始时 主角是在他的家里 他要是想出去的话 就需要执行场景切换这个处理函数 我们假定该事件的编号为 那么在地图上把家门外路口处的格子值设为 这样主角走到路口时 编号为 的场景切换函数就会被触发 于是主角便到了下一个场景中 程序具体如下:
void MessageLoop( int Msg ) //消息循环
switch( Msg )
char AddressName[ ]; //数组AddressName[ ]用来存储主角所在地点的名称
case ADDRESS == : // 由ADDRESS的值决定场景值(出门)
ScreenX= ; ScreenY= ; //初始化游戏背景位置
Hero x= ; Hero y= ;//主角坐标
Move();//主角移动函数
//以下程序用来显示主角所在地点
sprintf(AddressName 下一幅游戏场景的名称 );
PrintText(lpDDSPrimary Address>
break;
三 打斗系统
绝大多数的RPG都是有战斗存在的 因此 打斗系统就成为RPG系统中很重要的一环 有不少RPG游戏采用回合制打斗方式 因为实现起来较为简单 和打斗紧密相关的是升级 通常在一场战斗结束后 主角的经验值都会增加 而当经验值到达一定程度时 角色就升级了
cha138/Article/program/Java/hx/201311/26462相关参考
求回合制单机游戏画面优美制作细致最好LZ知道日本F社的英雄传说系列么?英雄传说系列属于角色扮演RPG,角色是动漫风格人物,战斗系统是标准的回合战斗模式英雄传说系列作品有很多,推荐LZ玩最出名的几部包括
知识大全 双缓冲原理在awt和swing中实现消除闪烁的方法
对于双缓冲的分析是在坦克大战游戏的设计时开始的由于当时忙于游戏的整体设计所以对这一个问题没有进行详细的研究现在就这个问题来谈谈自己的一些看法分析前提出几个问题&nb
什么是模板引擎?说白了就是能够自动替换占位符的替换引擎原理上也就是两个步骤找到》替换但是替换不是简单的替换包括 简单变量替换();复杂变量替换();对象变量替换();键值类型替换();自定义集合
知识大全 网络游戏不花钱,玩了5年,还比不过一个刚玩花很多钱的人
网络游戏不花钱,玩了5年,还比不过一个刚玩花很多钱的人?其实主要是一种攀比心理,看到好友都在玩,就会不知不觉玩下去,自己也会想玩,玩了后还想要超越好友本来就是没有什么意义不花钱的RPG网络游戏天下贰不
什么是模板引擎?说白了就是能够自动替换占位符的替换引擎原理上也就是两个步骤找到》替换但是替换不是简单的替换包括 简单变量替换(); &n
4k双屏引擎是什么意思4K宽频引擎技术,是行业第三种4K解决方案,是海尔U+实验室联合全球著名半导体设计公司Mstar和Amlogic共同创新的一种4K信号接收及图像处理技术,该技术能够实现在所有高清
知识大全 想学习游戏制作 需要下载什么软体 还要了解哪方面的知识谢谢
想学习游戏制作需要下载什么软体还要了解哪方面的知识谢谢游戏制作分为游戏程式、游戏美术、游戏策划。你指的应该是游戏程式,一般用的比较多的引擎是cocos2d和unity3d,这些在他们的官网都能下载安装
主题游戏网吧装修如何选择设计方式?主题游戏网吧是最近几年出现的,以几款热门网游为主题风格设计装修的网吧,一直都是相应爱好玩家所向往的特色。而想要把主题游戏网吧装修成年轻人喜爱的风格,就要知道如何选择其
怎样使一个公司在百度的搜索排名靠前?大神们帮帮忙主要看你的搜索引擎优化。。。然后就看你的内容是不是具有原创性搜索引擎基本原理搜索引擎有两类:一类是纯技术型的搜索引擎,如AltaVista和Infose
知识大全 手机开热点给电脑,玩lol一局多少流量(只玩游戏,其他都关闭。)
手机开热点给电脑,玩lol一局多少流量(只玩游戏,其他都关闭。)游戏本身的数据量不大的,因为游戏引擎本身简单,一般一把就10-20M就能抖住,超长时间的50M以内绝对没问题的。你挂电脑,任务管理器打开