浅谈RPG核心系统_第1页
浅谈RPG核心系统_第2页
浅谈RPG核心系统_第3页
浅谈RPG核心系统_第4页
浅谈RPG核心系统_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

转 浅谈 RPG 核心系统 RPG 核心 系统 RPG 核心 系统 我认为 一个 RPG ARPG 的核心程序应该包含下列系统 我在说明的时候尽量说得细一些 虽然可能有些罗嗦 但是这样有助于理解 一 属性系统 这是游戏中最简单的系统 包括主角 物品 NPC 技能等各自的属性 属性系统的详细部分游戏策划应该给出 程序只需要给其保存的结构就行 了 这里的属性 自然不只包括事物的基本性状 也包括它应该引发的脚本代号 二 人物状态机系统 这个系统十分复杂 也是所有系统得以运行的基础 这个系统标志着人物目前处于一个什么样的情况中 相对于动作而言 人物是站立中 还是跑动中 还是对人对持中 还是在施放魔法中 还是在施展技能中 当然 有些状态是可以同时拥有的 比 如说站立和施法 有些是不能同时拥有的 比如说站立和走动 这在程序中需要用不同的变量来区分 相对于剧情而言 人物现在是接受了这个任务吗 没有接受任务吗 或是完成了吗 如果任务不止一步 人物进行到哪一步了 每个任务都要用不 同的状态机来保存 相对于属性而言 人物现在是中毒吗 没有中毒吗 人物现在可以移动吗 可以以正常速度移动吗 人物现在可以施展技能吗 可以施展哪些技能 主角目前身上有什么物品 任务 或是非任务物品 身上有什么装备 曾经去过哪些地方 杀死过哪些怪物 和哪些人对过话 这些东西都是需 要状态机来表示的 因为脚本系统需要这些状态机来进行判断 当然 这其中有些状态机不需要事先设定 而是等需要的时候才计算 比如说物品状态 机 在需要的时候给定一个物品的代号 然后状态机系统就可以给出角色是否拥有这个物品 拥有多少个之类 在这里有一点关键性的东西 游戏程序中的状态机和游戏设计中的状态不是一一对应的 比如说 游戏设计中有 麻痹 这一状态 但是状态机中 却不一定有 当然 状态机是人设计的 你要设计一个这样的状态也是可以的 而是用 移动 否 动作 否 这两个状态机来表示 当然还有许多许多的状态机情况 游戏的规则越复杂 所需要的状态机就越多 状态机系统也越复杂 因为各个状态之间也是相互关联的 状态机 系统之所以重要 是因为周围世界中所发生的一切行为都是以人物处于何种状态而决定的 三 行为系统 这个系统决定了游戏的表演方式 也与图形引擎和声音引擎挂钩 当人物 或是怪物 发出一个动作之后 这个动作要怎么表示 比如说攻击 虽 然在角色发动攻击的一瞬间 攻击是否命中 目标会受到多少伤害 这个已经被计算好了 但是不可能角色的刀子一举起来 怪物就作出受伤的动作并 且惨叫一声 而是角色的攻击动作到达某一个阶段 程序上来说就是哪一帧 的时候 怪物才作出受伤的动作 而且 还有许多不是在动作启动时就可以做出计算的 而是在碰撞检测之后才决定的 可以是物理 或是非物理的 比如说弓箭 飞弹类型的魔 法 攻击范围会渐渐变化的魔法 例如火环 追尾型的飞弹之类 这些东西的进行方式都是行为系统来控制 而非脚本系统 以下会介绍 来控制 以火环为例 它从发动到结束共有多少帧 每帧会产生什么样的变化 它影响的区域会怎么样变化 不同的事物可以用不同的行为系统 但也可以共用同一个行为系统 比如说冰环和火环 虽然他们的渲染和伤害计算是不同的 但是他们的行为是 一样的 又比如说死亡的动作 如果死亡就只有一种表现形式 那么关于死亡的行为系统也不复杂 但是有多种死亡动作呢 比如说向前倒下 向后倒下 软倒 直立着跪下那种 如果是从正面受到攻击 那么向后倒下才符合情况 而用先前倒就不真实了 或者是向后倒之后 再加上一定程度的移动 就可以造成 吹飞 被人打出去很远 的效果 那么判断何时使用哪种动作 就是行为系统的部份 当然 人物行为所造成的影响的计算也是这个系统的功能 分析人物目前的状态 决定使用哪一个公式来计算影响 动作是否成功 例如命中之类 人物 怪物受到影响之后会产生什么样的动作 当然不是指怪物的决策行为的这种关于 AI 的部份 是指如果生命降到 0 就要执行死亡动作这一类 也 是行为系统的部份 这虽然是一个非常重要的部份 但因为大家对计算都了解 所以就不多说了 四 交互 操作系统 操作系统相对而言是简单的 接受用户的输入 并判断这个输入将要产生什么样的影响 执行何种操作 也需要决策是否能够执行操作 判断的准 则需要同时分析角色和目标的状态 比如说 用户把一个 NPC 设为目标时 这个目标是友好的吗 是敌对的吗 如果是友好的 则执行对话的行为 如 果是敌对的 则执行攻击行为 或者 不管目标怎么样 现在主角处于 麻痹 状态 所以不管攻击还是对话的行为都无法执行 所以用户的这一操作 便被忽略 不予执行 游戏的各种菜单也是这个系统的一部份 包括剧情对话框 物品购买界面以及各色各样的特有对话系统 比如说 仙剑 3 的炼剑系统界面 轩辕 剑 3 的炼妖系统界面 都属于这一类 因为他们本质上就是一种对话框 它提供给用户一些信息 而用户执行的操作将对角色产生影响 或是触发某 个事件 脚本 比如说购买界面 在上面执行的操作就能够给用户增加一项或多项物品 从地上捡拾物品也是一样 炼剑系统则是改变主角的剑的性质 交互系统的逻辑层面并不复杂 它的难点主要在于烦琐的细节 所以这也是游戏中 BUG 多出的地方 例如暗黑中著名的物品复制 BUG 诸如此 类 就是因为操作系统有缺陷才造成的 五 脚本系统 这是构成精彩世界的重要组成部份 一个好的脚本系统几乎可以操作游戏世界中的一切 什么 你说脚本不能控制用户的菜单 那如果你的游戏中 要做一个给初学者的教学演示呢 在以剧情为重的 RPG 中 脚本系统将是十分复杂的 但是 不管脚本如何复杂 它都由三个基本的部份组成 第一 脚本执行的先决条件 这个脚本执行需要什么样的条件呢 是领到某个任务 是杀 死某个单位 或是到过某个地方 第二 脚本执行的动作 脚本执行的动作是多种多样的 这取决于脚本系统的能做到什么样的事情 最基本最常见的 展开一段剧情对话 或者是由一系列人物表演一系列动作 当然 只要游戏能做到的一切 都可以作为脚本的动作 第三 脚本产生的影响 脚本执行 之后 给人物 给这个世界造成什么影响呢 是增加人物的力量 或是直接导致角色死亡 接受到一个新任务 或者完成一个任务 当然 也有可能触 发另一个脚本 脚本分为游戏脚本和地图脚本 游戏脚本是在任何情况下 只要触发并且条件满足就可以执行的脚本 而地图脚本则是在指定的地图上才可以执行 通常它需要指定的单位和指定的环境 游戏中的大部份表演都是基于地图的脚本 六 地图 环境系统 如果脚本是游戏世界的灵魂的话 那么地图系统则是游戏的血肉 地图系统包含了地形状况 怪物 NPC 建筑等一切与世界相关的单位 它是玩 家活动的空间 一切元素的容器 也是脚本系统的容器 它决定什么地方拥有什么样的事件 地图上拥有什么样的人物 什么样的脚本 决定了地图上 会发生什么样有趣的事情 可以说 地图决定了整个游戏的面貌 但是 地图分为地图和世界 世界包含整个游戏部份 在上面脚本系统中所说的游戏脚本也是属于地图 环境系统的实现部份 这一个系统没有什么 可说的 想必大家都十分了解 七 AI 系统 这个系统也是很关键的一个系统 不过关于它并不需要太多的介绍 因为这也是大家都熟悉的系统 虽然这也是一个影响行为的系统 但是它的大 部份功能在于怪物如何与角色战斗 复杂的行为模式是脚本系统要实现的 这个系统只实现简单的决策 战斗还是不战斗 行进路线 用什么样的技能 魔法战斗等 八 主控制系统 这个系统也不用多作说明了 它由一系列菜单和调用组成 游戏的存储 读取功能也是由这一个系统负责 它掌管整个游戏的进行过程 脚本起着驱动整个游戏进程的作用 在单机 RPG 时代游戏的剧情发展和任务都是由客户端的脚本来驱动的 目前现有的网游绝大部分也都拥有自己的脚本系统 或者嵌入某种通用的脚本语言如 python lua 或者自己设计一套游戏流程 逻辑描述规则也就是自 定义的剧情描述语言 和单机 RPG 所不同的是网 游的脚本通常运行在服务器端 游戏中的脚本体系一般以事件为中心 和宿主代码之间进行相互的交互 1 宿主代码会在某些事件发生或者满足一定条件下调用脚本 这种调用是双方约定好的 例如调用脚本的某一个函数 2 脚本被调用后会执行剧情逻辑 当然做具体的动作的时候还是要调用宿主代码暴露给脚本的接口 脚本代码和宿主代码相比较 最大的优势在于脚本更为简单易学 有利于策划编写游戏逻辑 而且不需要重新编译程序 劣势是脚本通常是解释性的或者是类似于 java 有中间字节码的 执行速度上远不及宿主二进制代码 有的资料显示要慢 10 倍以上 下面我们来看下剑侠情缘公测服务端 1 2 的脚本 其用的是嵌入 lua 我们先找个它的简单来分析下是如何实现的 巴陵县 长江码头船夫对话 lua function main sel if GetLevel 10 then 等级达到十级 Say 船夫 我有个外号叫做 浪里白条 说起游水的功夫 全巴陵县我认了第二 就没人敢认第一 所以坐我的船你保管放心 你要去哪个码头呀 2 坐船 WharfFun 不 坐 OnCancel else Say 船夫 对不起 没到十级的新手不能坐船出村 0 end end function OnCancel Say 船夫 没银子可坐不了船 0 end 在以上的脚本中描述了长江码头船夫和玩家之间的对话逻辑 当玩家点击 npc 试图和其说话时 服务器端就会调用该 npc 对应的脚本中的 main 函数来 驱动游戏的剧情 其中的 GetLevel Say 等就是宿主 代码暴露给脚本的接口 如果玩家在客户端选了 不坐 客户端会发送 OnCancel 给服务器来促使其执行 OnCancel 函数 下面看一个稍微复杂些的任务脚本 每行的 后为添加的注释 两湖区 巴陵县 路人 4 小渔对话 巴陵县新手任务 小渔的爹爹 suyu function main UTask world18 GetTask 46 从宿主代码得到保存的任务进度状态 if GetCamp 0 and UTask world18 2 then 如果任务还未完成 UTaskMain else Default end end function UTaskMain 该函数由 main 函数调用 if UTask world18 0 then UTask world18 0 end if UTask world18 1 then UTask world18 1 end if UTask world18 2 then UTask world18 2 end end function Default 如果此任务已完成就执行这个函数 i random 0 1 if i 0 then Say 小渔 我爹爹是洞庭湖的渔民 每天都要到湖上去撒网捕鱼 如果遇到了刮风下雨 有时会好几天都回不了家呢 0 return end if i 1 then Say 小渔 爹很疼我 可是他老说如果我是男孩子就好了 那样我就可以帮他捕鱼了 0 end end function UTask world18 0 任务进度 0 分配任务 Say 小渔 呜呜 我爹昨天打鱼遇上大风雨 被淋病了 现在还发烧呢 爹的病还没好 又不能打鱼 我们吃什么啊 你能帮我去求求吴神医么 吴 神医是个大好人 他一定会帮我们 的 2 帮忙 yes 不帮 no end function UTask world18 1 任务进度 1 已接受任务 Say 小渔 吴神医的家就住在县南门边 0 end function UTask world18 2 if HaveItem 枇杷丸 1 then 玩家身上有物品 枇杷丸 Say 小渔 啊 这就是枇杷丸 这下子爹爹的病很快就会好起来的 你真是个大好人 这双鞋是我娘做的 你一定要收下呀 0 DelItem 枇杷丸 从玩家包裹中移除该物品 if GetSex 0 then 判断性别进行任务奖励 AddItem 0 5 0 1 0 0 else AddItem 0 5 2 1 0 0 en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论