Ruby 版本置换 1.0 (->2.5.1)
切换了之前的思路 这次说是版本置换也贴切 说是双版本也贴切原理大概是这样的:
用了 RubyInstaller 编译好的 dll自己再写了个 dll 用来启动等等
在代码页 init 里面初始化修改了部分机器码使得此后的代码页交由新版本的 ruby 解释器执行
至于如何在新版本的解释器里执行原 RGSS 功能 我的做法大体上是利用 eval
新解释器里我写了三个方法 一个是 p 类同原功能 因为新版本对字符串编码的不同 若 p 一个包含中文的非字符串对象将无法显示中文 此外 一些函数不同了 游戏中部分显示文章的功能需要改写 这个我没附上 因为比较简单 可自己根据需求写
一个是 rgss_eval(str) 用旧版本的解释器eval str 会有返回值 若是常量如 nil true false 和不大的数字 以及字符串 可以正常返回 其余的返回不可靠
这是因为新旧版本储存对象的方式和解释器环境不同 对象不可共用 除非是一些常量 数字 字符串能返回是因为我作了一个判断 然后作了转换
一个是 rgss_save_str(var_name, str) 将 str 储存到旧解释器的变量 var_name 中 如 rgss_save_str("$hello", "hello");rgss_eval("p $hello")
利用这三个方法 我将 RGSS 作了包装以用于新的解释器如
RUBY 代码
module Audio
module_function
def bgm_play(filename, volume = 100, pitch = 100)
rgss_eval("Audio.bgm_play(\"#{filename}\",#{volume},#{pitch})")
end
end
类的包装借助了全局变量 $bitmap 等等 每个新解释器下的原 RGSS 对象都有一个 n 属性 是对应全局变量的编号以便于操作
所有的 RGSS 功能已经被包装 不需要了解细节也可以如常使用 细节在下面范例的脚本中那个范例是一个模板 假如要使用可以从那个开始 或者把文件夹下的 dll 啊 lib 库 和需要的脚本拷贝过去需要什么库自己 require
我也有写 ReadMe.txt 其余的细节看那个吧 大致写的差不多
看一些转换和包装的脚本大概就能理解运作的过程了操作内存的脚本需要改造 如保存 png 的 理由很明显 不想改造就把脚本放在 init 脚本页前的旧解释器环境下 然后用 rgss_eval 调用
这次应当并无隐疾 除了因为版本不同而造成的不同 这些请自己调整
下为范例
ruby版本置换1.08cbg
大致如此有bug请提 欢迎建议
本帖来自P1论坛作者SixRC,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=410183若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]