赞 | 400 |
VIP | 0 |
好人卡 | 24 |
积分 | 250 |
经验 | 45372 |
最后登录 | 2024-7-2 |
在线时间 | 3339 小时 |
Lv5.捕梦者 (版主)
- 梦石
- 1
- 星屑
- 24004
- 在线时间
- 3339 小时
- 注册时间
- 2011-7-8
- 帖子
- 3926
|
本帖最后由 guoxiaomi 于 2020-3-26 17:09 编辑
我对Scene_Title进行了如下的改动,并且复现了此BUG,注意19行的super:
因为XP没有Scene_Base,为了让每个场景里都会跟随着 $net.update,我直接给所有的以 Scene_ 开头的类修改了对应的 main 和 update 方法,但是这样做是存在一个问题的:
上图中的 Scene_Title 继承自 Scene_Title_Base,从而导致两个类里的 main 和 update 方法都被修改了,但是真实的游戏里,并不会有 $scene = Scene_Title_Base.new(...) 这段代码,
所以 Scene_Title_Base 作为不会被实例化的类应该被排除在外。
你需要修改 scene_base_net.rb 里的内容,在 14 行后加入下面的代码以排除不会被实例化的类。比如 Scene_File:
- All_Scenes -= [Scene_File]
复制代码
你可以 print 出 All_Scenes 然后看看里面有哪些类。
或者可以去寻找在 main 和 update 中使用了 super 继承父类方法的类,把这些类排除掉。(不推荐)
如果你的脚本里有其他场景类,但是不以 Scene_ 开头,你也需要手动把这些场景类加入到 All_Scene 里,否则会导致玩家处于这个场景时,网络数据不被更新,如果持续时间较长则会被服务器断开连接。
解释一下为什么和默认脚本兼容,这是因为在默认脚本里只有 Scene_File 和 Scene_Save / Scene_Load 有继承关系,而在继承的时候并没有使用 super 调用父类的 main 和 update 方法。实际上这两个方法甚至没有定义。
顺便多谢你的提醒,我已经更新了gitlab上的工程,排除掉 Scene_File 类。 |
|