跳到主要内容

核心脚本函数的使用

rmmz 的核心脚本是一个庞大的函数集合。

并且这些函数是以对象属性的形式定义的。

在本项中,终于要学习核心脚本函数的使用方法了。

获取变量

获取游戏变量内容的脚本如下。

在开发者工具中输入到 $game 时,$gameVariables 会出现在候选项中。

$gameVariables.value(1);

首先 $gameVariables 是一个用于处理游戏变量的“对象”,在核心脚本中定义。

接下来 value$gameVariables 所拥有的属性,并且是一个函数。

这也在核心脚本中定义。

参数 1 是变量编号。

也就是说,执行上述脚本后,编号 1 的变量的值会作为返回值返回。

如果在这段说明中有不明白的地方,请重新阅读“函数”一章。

备注

全局变量

在程序中无论何处都可以引用的变量称为“全局变量”。

核心脚本中也定义了几个全局变量,以符号 $ 开头的变量如 $gameVariables 等,基本上可以认为是全局变量。

在 js 中,在顶层(不在任何函数块内部的地方)声明的变量会被视为全局变量。

(未声明就使用的变量也会成为全局变量,但试图用这种方法使用全局变量可能会在无关的地方引发错误,非常危险)

在开头加上 $ 也有明确表示该变量是全局变量的意思,但这也是前作 RPG Maker VXAce 及之前版本中使用的 RGSS 中存在“以 $ 开头的变量会成为全局变量”这一规则所带来的遗留。

设置变量

接下来讲解为游戏变量设置值的脚本。

$gameVariables.setValue(1, 3);

setValue 也和 value 一样,是 $gameVariables 所拥有的函数。它接受两个参数。

第一个参数是变量编号,第二个参数是设定值。

执行设置脚本后,再次执行获取脚本,应该能确认设定值已被反映。

获取数据库

rmmz 中有庞大的数据库。

这里输入的所有值都存储在名为 $dataXXX 的全局变量中。

例如,尝试执行以下脚本。

$dataActors[1].name;

我想会返回在数据库“角色”中注册的第一个角色的名字。

$dataActors 是在核心脚本中定义的数组变量,索引是数据库的 ID,元素是存储了角色数据库注册值的对象。

但请注意,只有索引为 0 的元素是 null

name 是作为 $dataActors 各个元素的对象所拥有的属性之一,其中存储了“名称”的输入值。

其他数据库也以同样的方式定义,以下是一览表。

变量名说明
$dataActors角色
$dataClasses职业
$dataSkills技能
$dataItems物品
$dataWeapons武器
$dataArmors防具
$dataEnemies敌人角色
$dataTroops敌群
$dataStates状态
$dataAnimations动画
$dataTilesets图块组
$dataCommonEvents公共事件
$dataSystem系统、用语
$dataMapInfos地图树信息
$dataMap地图信息

关于所有数据库的所有属性,此处无法一一列举,因此另外准备了参考手册。

参考该参考手册,就可以随心所欲地获取在数据库中输入的所有信息。

rmmz脚本参考

游戏对象

游戏中处理的变量除了游戏变量之外还有很多。

例如,队伍成员的 HP、持有的物品、敌方角色的剩余 HP 等。

它们与数据库不同,会随着游戏进度而变化。

在本项中为了方便,将其称为“游戏对象”。

游戏对象存储在名为 $gameXXX 的变量中。

存放游戏变量的 $gameVariables 也是其中之一。

变量名包含的信息说明是否包含在存档中
$gameTemp临时想存储的信息×
$gameSystem系统设置信息
$gameScreen画面效果相关信息
$gameTimer计时器相关信息
$gameMessage消息和选项相关信息×
$gameSwitches开关信息
$gameVariables变量信息
$gameSelfSwitches独立开关信息
$gameActors所有角色的信息
$gameParty队伍相关信息
$gameTroop敌群相关信息×
$gameMap地图相关信息
$gamePlayer玩家相关信息
$testEvent事件测试的信息×
DataManager处理数据库加载的函数群×
ConfigManager处理选项设置的函数群×
StorageManager处理文件输入输出的函数群×
FontManager处理字体文件的函数群×
ImageManager处理图像加载的函数群×
EffectManager处理粒子效果的函数群×
AudioManager处理 BGM 等音频播放的函数群×
SoundManager播放系统音效的函数群×
TextManager处理用语的函数群×
ColorManager处理系统颜色的函数群×
SceneManager处理场景控制的函数群×
BattleManager处理战斗整体的函数群×
PluginManager处理插件的函数群×

通过各对象获取信息的具体方法也汇总在参考手册中。

上表中的游戏对象大致分为两类。

一类是 $gameXxx 对象,另一类是 XxxManager 对象。

$gameXxx 同时持有函数和数据。

例如 $gameParty 在持有当前队伍相关信息的同时,还提供了向队伍添加成员的函数。

而 Manager 原则上只提供函数。

如表中所示,它们按用途分开,例如图像加载用 ImageManager,音频加载用 AudioManager,等等。

备注

面向对象

对脚本感兴趣的人,大概至少听说过一次面向对象。

简洁地说明面向对象很困难,但强行要说的话,像 $gameXxx 那样将相关的“函数”和“数据”作为一个整体来处理就是面向对象。

在面向对象中,函数被称为“方法”。

数据原则上被隐藏,只能通过方法从外部进行操作。数据如何处理由方法决定。

这种想法在处理脚本时未必需要了解,但如果你打算制作需要程序设计的规模庞大的插件,那么这是应该了解的思想。