本文链接:用VSCode写RPG Maker的Ruby脚本
前言
最近突然起了兴趣,想要用RPG Maker做点什么。虽然用RPG Maker做基本的RPG很方便,但如果不修改脚本,能做的事情很有限。而如果想修改脚本,内置的脚本编辑器基本就不能好好使用——程序员本能的Ctrl+S无效,Esc无提示地不保存退出,没有语法提示。我想,内心不够强大的人是无法驾驭得了它的。我觉得我不算是内心强大的人,在最初就使用了Notepad++这样的文本编辑器来写脚本。但随着脚本规模扩大,仅用文本编辑器写脚本非常力不从心。这时,我就盯上了VSCode,这款介于文本编辑器和IDE之间的软件。
目的和思路
基本的编辑功能VSCode都已经有了,之后我想要的功能是语法提示,比如类中包含的方法名,方法的参数列表等等。所以只要安装相应的扩展就可以了。起初,我想当然地用了Ruby扩展,然而发现这个扩展主打的是调试Ruby代码。所以最后我选用了Solargraph扩展,这是一个Ruby的语言服务,专门用来完成诸如语法分析,提示等功能的。
安装和配置
安装扩展没什么说的,直接在VSCode里搜索就有Ruby Solargraph扩展。
Solargraph需要Ruby语言环境,所以上Ruby官网下载安装即可,要记得把Ruby的可执行目录放入环境变量PATH中,方便在命令行里使用。
使用命令gem install solargraph
安装Solargraph服务。在Windows下,如果出现错误提示需要安装msys的话,就按照提示下的命令先安装msys。
安装好之后,重启VSCode,打开一个Ruby文件,如果一切正常,说明已经可以使用了。而我这里出现了一个错误:
Unable to load the EventMachine C extension
在控制台下运行以下语句安装另一版本的eventmachine,并卸载旧版本的eventmachine可以解决:
1 2 3 4 5 |
gem install eventmachine --platform ruby -- --use-system-libraries --with-ssl-dir=c:/msys64/mingw64 ruby -reventmachine -e "puts EM.ssl?" => true gem uninstall eventmachine |
会弹出选项问你要卸载哪一个版本,这里选择卸载:
eventmachine-1.2.7-x64-mingw32
结合RPGMaker
现在已经可以在VSCode里写Ruby了,如果想看到RPGMaker里的类,可以将RPGMaker的脚本全部复制过来。不一定在同一个文件里,Solargraph会读取打开目录下的全部脚本。我本想找一个导出全部脚本的方法,但是没有找到,好在也不多,我就一个个复制出来,安排成下面的目录结构:
但是RPGMaker的代码不全在ScriptManager下,也有一些内置的类,在RPGMaker的帮助文档下(按F1可以出来)可以看到它的定义。这些类可以自己写一个文件定义,在写脚本时就会有提示了。比如我写的Input的定义(注释已经被省略):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
module Input def self.update end def self.press?(sym) end def self.trigger?(sym) end def self.repeat?(sym) end def self.dir4 end def self.dir8 end end |
另一个问题是一些全局变量不能被提示出来,同样需要一个文件来帮助找到它们的类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$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") $game_temp = Game_Temp.new $game_system = Game_System.new $game_timer = Game_Timer.new $game_message = Game_Message.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new |
当以上这些都完成后,就可以在VSCode里任意地写RPGMaker的脚本了,这体验比自带编辑器的体验不知好到哪里去了:
总结
我要是再有钱一点,就去买RPGMaker MV了,写什么Ruby。还是Javascript更熟悉一些。还有就是VSCode真好用。