核心脚本函数的使用
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 那样将相关的“函数”和“数据”作为一个整体来处理就是面向对象。
在面向对象中,函数被称为“方法”。
数据原则上被隐藏,只能通过方法从外部进行操作。数据如何处理由方法决定。
这种想法在处理脚本时未必需要了解,但如果你打算制作需要程序设计的规模庞大的插件,那么这是应该了解的思想。