排错与性能
脚本不动、报错、掉帧、内存涨——按现象查。
先做这三步
- 按
O打开设置,开enableRenderDiagnostics - 复现一次问题
- 看
logs/latest.log,搜[Script]与Error in RTE Resource Pack JavaScript
RTE 没有
/rte debug 命令,
调试开关都在配置界面里。现存的命令只有 /rte repairrails 与
/rte fixoneway,都需要 OP 权限。脚本完全没反应
| 检查 | 做法 |
|---|---|
| 资源包启用了吗 | 在资源包界面确认已启用并排在正确位置 |
| 重载了吗 | 改完脚本按 F7,不必重启游戏 |
| 车辆 ID 对得上吗 | custom_trains 的键必须与实际车型 ID 一致 |
| 声明字段对吗 | 3.x 风格用 script_files,4 风格用 vehicleScripts 加 scriptId |
| 被别的包抢了吗 | 同一车辆 ID 只绑定一次,先加载的生效 |
| JCM 装了吗 | JCM 也有 JS 系统,可能接管了。看配置 jcmJsChoice |
日志里搜 [ScriptedCustomTrains] 能看到实际绑定了哪些车辆。
脚本跑一会儿就停了
这是失败退避在起作用。同一个函数连续抛异常会被暂停一段时间, 防止坏脚本每帧每车抛异常拖垮整局。
搜 Error in RTE Resource Pack JavaScript 看栈,修好后按 F7 恢复。
报「类不可访问」
用了白名单外的 Java 类。
常见的是 java.io、java.net。
读资源请改用 Resources.readString() 等方法。
掉帧
| 原因 | 症状 | 解法 |
|---|---|---|
| 每帧重建模型 | 车一多就卡 | 结果缓存进 state,数据变了才重建 |
| 每帧重画贴图 | 有 LCD 的车特别卡 | 比对内容,没变就直接返回 |
| 没做距离剔除 | 远处车也吃性能 | 开头判 train.shouldRender() |
| 日志刷屏 | 卡顿且日志暴涨 | 给 print 加限流 |
| 模型没烘焙 | 绘制调用过多 | 烘焙成 ModelCluster |
开 enableRenderDiagnostics 后,日志每 10 秒汇总一次各阶段耗时与慢帧,
能定位是脚本还是渲染的问题。
内存持续上涨
| 原因 | 解法 |
|---|---|
GraphicsTexture 没关 | 在 dispose 里 close();用 liveCount() 盯数量 |
state 里无限追加 | 数组、Map 要设上限或定期清理 |
| 每帧新建大对象 | 复用 BufferedImage,别每帧 new |
| 贴图过大 | 客户端配置 maxTextureSize 可限制上限 |
state 是每辆车一份的。
往里塞的东西乘以在线车辆数,才是真实内存占用。报站重复播放
触发条件写成了 isDoorOpen() —— 它在整个开门期间都为真,所以每帧都播。
改用 justOpening(),它只在开门那一帧为真。
速度数值差很多
MTR 4 内部用毫秒,3.x 用 tick 或秒,差 50 倍。
显示速度一律用 train.speedKmh(),不要绕过封装自己算。
详见 MTR 3.x 兼容与迁移。
模型转了但角度不对
RawMesh 的旋转方法接受角度不是弧度。
传 Math.PI 只会转 3.14 度,看起来像「几乎没转但有点歪」。
还是不行
带上这些信息开 Issue:
- RTE 版本与加载器(Fabric / Forge)
- MTR 版本
- 用的引擎(
rhino还是graal) logs/latest.log- 能复现的最小脚本