默认的脚本到底在做什么?在解读篇中,笔者会给出一些用来解读这些脚本的提示。
而本章会解释在脚本中是如何处理 VA 的数据库的。
请先从脚本编辑器左侧的列表中,找到 DataManager 项,在这页脚本刚开始的地方,能看见下方的代码对吧。这个 load_normal_database 是在游戏开始之后,在标题画面显示之前会先调用的方法。
def self.load_normal_database $data_actors = load_data("Data/Actors.rvdata2") $data_classes = load_data("Data/Classes.rvdata2") $data_skills = load_data("Data/Skills.rvdata2") $data_items = load_data("Data/Items.rvdata2") $data_weapons = load_data("Data/Weapons.rvdata2") $data_armors = load_data("Data/Armors.rvdata2") $data_enemies = load_data("Data/Enemies.rvdata2") $data_troops = load_data("Data/Troops.rvdata2") $data_states = load_data("Data/States.rvdata2") $data_animations = load_data("Data/Animations.rvdata2") $data_tilesets = load_data("Data/Tilesets.rvdata2") $data_common_events = load_data("Data/CommonEvents.rvdata2") $data_system = load_data("Data/System.rvdata2") $data_mapinfos = load_data("Data/MapInfos.rvdata2") end
在这段代码中,RM 会从保存好的文件中读取数据库,并让里面的各种数据可以从脚本中获取。凡是以$这个符号为开头的变量称作全局变量,顾名思义,这些数据在这段代码之后,不论是在脚本的哪个地方都能够由此获取。
所谓的 load_data 是RGSS 内建函数之一,是可以从指定的文件中读取数据的函数,比方说上面第一行代码的意思是:从 Data 文件夹中的 Actors.rvdata2 这个文件中读取数据,并将数据赋值给叫做 $data_actors 的变量中。
此外,在定义 load_data 方法最开始的地方写着 self.,这是定义 模块方法的方式。 关于模块会在下一章解释,现在请先将注意集中在方法的内容里面。
每个对象所代表的东西如下:
变量名 | 对应的数据库 | 使用的类 |
---|---|---|
$data_actors | 角色 | RPG::Actor 的数组 |
$data_classes | 职业 | RPG::Class 的数组 |
$data_skills | 技能 | RPG::Skill 的数组 |
$data_items | 物品 | RPG::Item 的数组 |
$data_weapons | 武器 | RPG::Weapon 的数组 |
$data_armors | 护甲 | RPG::Armor 的数组 |
$data_enemies | 敌人 | RPG::Enemy 的数组 |
$data_troops | 敌群 | RPG::Troop 的数组 |
$data_states | 状态 | RPG::State 的数组 |
$data_animations | 动画 | RPG::Animation 的数组 |
$data_tilesets | 图块 | RPG::Tileset 的数组 |
$data_common_events | 公共事件 | RPG::CommonEvent 的数组 |
$data_system | 系统 | RPG::System |
$data_mapinfos | 地图信息 | RPG::MapInfo 的哈希表 |
从角色到公共事件这11种数据都是数组,对应数据库中每个项目的每个编号。不过在 VA 中,每个项目的数据ID都是从1开始,为了让数据ID跟数组的编号对齐,每个项目的第一个项目(也就是[0]项)的内容都是 nil。
接下来也差不多和基础篇一样,在先前的 TEST 脚本页里写下获得数据库的代码试试看,但我们还存在一个问题。那就是在我们写在最上方的 TEST 这页脚本开始运行的时候,DataManager 这个模块还没有被定义。
所以我们快像下面一样,把跟 load_normal_database 方法一模一样的内容以及处理加上去吧。
$data_actors = load_data("Data/Actors.rvdata2") $data_classes = load_data("Data/Classes.rvdata2") $data_skills = load_data("Data/Skills.rvdata2") $data_items = load_data("Data/Items.rvdata2") $data_weapons = load_data("Data/Weapons.rvdata2") $data_armors = load_data("Data/Armors.rvdata2") $data_enemies = load_data("Data/Enemies.rvdata2") $data_troops = load_data("Data/Troops.rvdata2") $data_states = load_data("Data/States.rvdata2") $data_animations = load_data("Data/Animations.rvdata2") $data_tilesets = load_data("Data/Tilesets.rvdata2") $data_common_events = load_data("Data/CommonEvents.rvdata2") $data_system = load_data("Data/System.rvdata2") $data_mapinfos = load_data("Data/MapInfos.rvdata2")
这么一来就能使用 $data_actors 等变量了吧。数组的使用方法没有忘记吧?
举个例子,只要看一下 RPG::Actor 的页面应该就能马上找到,下面是显示1号角色名称的单行脚本。
p $data_actors[1].nickname
接下来的脚本用来显示敌方2号角色的名称。name 不是在 RPG::Enemy 中定义的,而是在它的父类 RPG::BaseItem 中定义的。
p $data_enemies[2].name
再来的范例用来显示3号物品所指定的物品图标的编号:
p $data_items[3].icon_index
最后一个脚本则用来显示出4号开关的名称:
p $data_system.switches[4]
想要获得数据库,诀窍就在于,从RGSS参考中检索到想要获得的数据的属性(变量)名称就可以了。
多试几次看看,确定自己能够正确获得数据之后就往下一章迈进吧!