扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 223|回复: 0

[转载发布] Ruby 版本置换 1.0 (->2.5.1)

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:47
  • 签到天数: 145 天

    连续签到: 4 天

    [LV.7]常住居民III

    2398

    主题

    463

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    12420
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    15309

    灌水之王

    发表于 2024-4-20 01:03:46 | 显示全部楼层 |阅读模式
    切换了之前的思路         这次说是版本置换也贴切 说是双版本也贴切
            原理大概是这样的:
                    用了 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 代码
    1. module Audio
    2.   module_function
    3.   def bgm_play(filename, volume = 100, pitch = 100)
    4.     rgss_eval("Audio.bgm_play("#{filename}",#{volume},#{pitch})")
    5.   end
    6. end
    复制代码

                    类的包装借助了全局变量 $bitmap 等等 每个新解释器下的原 RGSS 对象都有一个 n 属性 是对应全局变量的编号以便于操作

                    所有的 RGSS 功能已经被包装 不需要了解细节也可以如常使用    细节在下面范例的脚本中  那个范例是一个模板 假如要使用可以从那个开始 或者把文件夹下的 dll 啊 lib 库 和需要的脚本拷贝过去  需要什么库自己 require
                   
                    我也有写 ReadMe.txt 其余的细节看那个吧 大致写的差不多

                    看一些转换和包装的脚本大概就能理解运作的过程了  操作内存的脚本需要改造 如保存 png 的 理由很明显 不想改造就把脚本放在 init 脚本页前的旧解释器环境下 然后用 rgss_eval 调用

                    这次应当并无隐疾 除了因为版本不同而造成的不同 这些请自己调整

                    下为范例

                    ruby版本置换1.0  8cbg
                   
                    大致如此  有bug请提 欢迎建议
                本帖来自P1论坛作者SixRC,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=410183  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-6-8 00:21 , Processed in 0.073100 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表