Game_Temp :
用途:保存游戏中产生的临时数据。
实例:$game_temp 游戏开始前产生的唯一一个实例。
属性:很多,需要的时候看定义后面的注释。
方法:无
心得:就是个数据仓库,游戏中需要用到的一些无法归类的乱七八糟的数据都可以往这边扔。游戏中呼叫窗口的开关基本都在这里面。多个对象之间如果要传递数据也可以通过$game_temp这个全局实例。
修改:如果要增加新的全局变量,可以在Game_Temp里面追加设定一个新的属性。
Game_System :
用途:同样用来保存游戏中产生的临时数据,但也提供一些额外的方法,额外的方法主要用来操作游戏音效,还包括计时器的更新。
实例:$game_system 游戏开始前产生的唯一一个实例。
属性: 一开始两个只读(attr_reader)属性map_interpreter和battle_interpreter分别是地图事件和战斗事件的命令解释器(Interpreter)实例。因为两种事件使用同一个命令解释器,所以参数分别用true(地图)和false(战斗)做区别。这两个属性的常用属性是running?,表示解释器是否正在运行。
timer:存储计时器当前变量
接下来6个属性都是在事件中设定的,没什么难理解的。
save_count:存档次数,一开始为零,存档时累加。在事件中可以将当前存档次数赋给一个公共变量。
magic_number:魔法编号,魔法数字,产生方法不明,游戏工程编辑后再存盘这个数字就会改变,用来判断是否需要重载地图和角色。
windowskin_name:窗口外观的文件名,虽然定义在方法里面,本质还是一个属性。其实开始直接 attr_accessor :windowskin_name ,再在initialize里面定义@windowskin_name = $data_system.windowskin_name 就好了。
battle_bgm和battle_end_me:战斗 BGM和战斗结束的 ME,也定义在方法里面,本质还是属性。
方法:音效(bgm\bgs\me\se)的演奏、停止、记忆、还原、淡出没什么好说的。Graphics.frame_reset可以帮助避免因播放较大文件音效时的失帧现象。 update 方法用来做计时器的更新。
心得:不伦不类的一个对象,感觉象是软件开发人员后期突然想起一个功能就随手扔进了Game_System里面。
修改:游戏中的计时器是根据图像帧的刷新而刷新的,如果不满意就修改这里吧,其他想不出什么可修改的。
Game_Switches :
用途:用数组形式保存游戏中的公共开关的值、数量上限定义为5000、未定义的开关默认值为false。
实例:$game_switches 游戏开始前产生的唯一一个实例。
属性、方法省略
心得:调用方法 $game_switches[公共变量的ID],在事件里面公共开关设定一旦启动,地图就会刷新。
修改:除了开关数量的上限,该对象本身没什么好修改的,但可以在脚本其它地方使用 $game_switches[公共变量的ID] 来做某些开关。但不提倡这种做法,这样做虽然设定事件的时候略微省事一点,但可能会和其他游戏中定义的开关发生冲突。在Game_Temp里面追加一个新的全局变量做开关能达到同样的效果。
Game_Variables :
用途:与Game_Switches类似,用数组形式保存游戏中的公共变量的值、数量上限同样定义为5000、未定义的变量默认值为0。
实例:$game_variables 游戏开始前产生的唯一一个实例。
属性、方法省略
心得:调用方法 $game_variables[公共变量的ID],在事件里面公共变量设定一旦启动,地图就会刷新。
修改:游戏中设定变量的最大值为 99999999,最小值为-99999999,不满意的话在Interpreter 4里面可以修改,其它同Game_Switches。
说实话,虽然本人也是从研究RM开始了解RUBY,并接触面向对象的语言。但看了RGSS的脚本后感觉代码写的很差,完全没有领悟面向对象的精髓,今天看到一篇RMXP SDK(震撼登场)的贴子,很多人不明白这是干什么用的。其实很简单,原来的脚本太烂了,用起来很不方便,所以要将其修改成符合面向对象精神的规范的代码,所以有了SDK。
SDK本身并不会实现什么特殊功能,但有了SDK以后在RMXP上用脚本增加功能将更方便,更不会发生冲突。(当然,前提是你懂得正确使用RGSS语言)
RGSS脚本研究报告是自己一边研究RGSS脚本一边整理的类似于笔记又类似于说明的东西,本文并不适合没接触过程序或对面向对象完全没有概念的人。如果觉得这些东西对你有帮助我很高兴,请多给我点鼓励让我继续写下去。但请不要任意转载,本人保留本文及其系列的所有版权。
|