下载 App
开发日志#2
修改于1 小时前3 浏览
一、本轮目标
沿线房屋上色,去掉通体惨白
单股道改双股道,配双站台、双列车
到终点后可倒车返回,并再次前进
修复终点弹窗无法退出的死锁
二、场景与世界
world/Platform.lua:导出双线横断面常量 AI_LANE_OFFSET=-5.6、CORRIDOR_CENTER_X=-2.8、TUNNEL_HALF_WIDTH=10.4;Get() 支持左侧站台
world/Track.lua:双股道所有构件合入原五组模板(轨头/轨底/道床/轨枕/扣件),不新增 drawables;补偿曲线外侧轨弧长
world/Tunnel.lua:隧道净宽 20.8m、中心 x=-2.8;新增第二站台、两侧棚顶与挡墙;两条接触线
world/Surface.lua:加宽桥面、地形与接触门架;新增 AI 接触线;房屋顶点色改为砖红/青绿/蓝/暖黄
world/TrainModel.lua:新增第 4 参 options { laneOffset, exteriorOnly, name } 与 SetDoorAmount(amount, side)
横断面:-13.2 墙 | -10.12…-7.12 AI站台 | -5.6 AI轨 | 0 玩家轨 | 1.52…4.52 玩家站台 | +7.6 墙
三、AI 列车(新增 world/Traffic.lua)
自动选用与玩家不同的已有车型,不新增美术素材
独立里程/速度/停站时序,不进入玩家奖励、存档、ATP、乘客系统
起点前方约 280m 对向驶来,逐站停靠、开门、关门、发车,两端折返
独立声源:电机脉冲 / 钢轨滚动 / 鸣笛,按观察点距离衰减 + 左右声像
玩家站序变化且距离 <100m 时排队一次招呼笛,带 12s 冷却与去重
接口:Step(dt, playerPhysics, playerStationIndex) 每仿真子步;UpdateView(…) 每渲染帧一次
四、往返驾驶
core/Journey.lua(新增):方向感知的站序与停车目标;ResetLeg 重置当前方向已服务站点;Continue 解除终点驾驶锁定
Game.lua:新增 ContinueDriving(reverse);GetNextStation / GetStopTarget 接入 Journey;开门对标独立用 _stationBegunDist;终点到达改为按方向端站判定;修正 missedStations 与运营里程口径
core/Signaling.lua:ATP/ATO 全链路方向化(允许速度、所需减速度、坡道分力、停车标、线路端点)
core/Boarding.lua:BeginStation(index, direction),终点/始发语义随行驶方向切换
core/TrainPhysics.lua:bodyDirectionSign —— 倒车只改牵引方向,不翻转整列编组
world/Passengers.lua:离站时清除旧候车队列并重置预载标记,修复返程到站后无法关门发车
五、终点弹窗修复(死锁根因)
原实现把「漏停站、任务未完成」也当成「保存失败」,两个按钮都反复重试同一份成绩,永远不关闭。
ui/ResultPanel.lua(新增):结果浮层独立模块;区分业务未达成与真实保存失败;三按钮 确认 / 倒车返回 / 返回主菜单;仅合法完整运营才提供独立「重试保存」;奖励领取失败不阻止导航
main.lua:结果显示期间冻结物理;ShowOverlay 成功后才置 _resultShown;结果弹窗期间屏蔽 ESC 叠层
ui/Common.lua:ShowOverlay 的 position=“fixed” 改为 absolute(Yoga 不识别 fixed,会排到 HUD 下方一屏),并使用实际 viewport 数值宽高
ui/DriveHud.lua:启动按钮改为 arrived and not freeDrive 才置灰,否则确认/倒车后手机端无法再次发车
原则:业务不合格不发奖励、不写盘,但可以关闭;只有真实完整运营而未保存,才提供单独重试。
六、类型修复(LSP Error 45 → 0)
core/Config.lua:LineDef 补 groundY / planRunSeconds,声明 SceneryConfig
world/Passengers.lua:补方法契约;分隔相邻 @class 块
world/Track.lua、world/Traffic.lua:分隔连续 @class 注释,恢复正确 self 推导
ui/Screens/Garage.lua、world/CameraRig.lua、core/Route.lua:补齐来源类型
未使用任何诊断禁用或大范围 any。
七、验收结果
quick(UI + AI + 房屋色 + 双站台几何):断言 65/65 通过,原始 runtime 通过,错误 0
连续真实 Game 往返驾驶:断言 19/19 通过,原始 runtime 失败仅 2 次帧尖刺,Lua/resource 错误 0
ui-extra(完整运营 + 保存失败 + 重试):断言 39/39 通过,原始 runtime 失败仅 4 个精确预期 Rename 错误,Lua/resource 错误 0
合计 123 项断言通过,LSP Error = 0,官方 build 成功。
往返驾驶实测数据:
连续 Game.Update(0.1) 共 20,438 次,正向 9 站 + 反向 8 站全部真实开门对标
反向最大对标误差 0.039 m,正向 0.054 m
返回始发站:里程 -0.0097 m、速度 0、门开、车内 0 人、门区无滞留
FinishRun 回调全程仅 1 次,无重复发奖
未覆盖 / 边界:
Linux 软件渲染存在已知 PBR shader link 异常(引擎侧),实际画面与音效听感需在设备预览确认
验收使用 -nosound,音频以源播放状态、gain、frequency(Hz) 断言,不代表听感
所有 Progress 真实 File 事务已隔离到 screenshots/rail-update/,未触碰玩家存档
验收脚本位于 scripts/validation/RailUpdateValidate.lua(非游戏运行时代码)#聚光灯gamejam开发者日志

















