增加跨栏必须按跳跃的判定
广告
{{v.name}}
📋 原始需求(task.md):
增加跨栏必须按跳跃的判定,只要玩家在栏杆的前50px到玩家和栏杆接触时的范围内没有按跳跃,则等到玩家和栏杆接触后,无论速度如何均判定为跨栏失败 现在的r.position单位是百分比,导致50px的判断不准。将每个栏杆之间的间隔改为500px,赛道滚动显示,玩家的显示位置左右居中
增加跨栏必须按跳跃的判定,只要玩家在栏杆的前50px到玩家和栏杆接触时的范围内没有按跳跃,则等到玩家和栏杆接触后,无论速度如何均判定为跨栏失败 现在的r.position单位是百分比,导致50px的判断不准。将每个栏杆之间的间隔改为500px,赛道滚动显示,玩家的显示位置左右居中
本步骤在跨栏王子中引入"必须按跳跃"判定,并修正之前用百分比估算 50px 不准的问题。具体改动为:1) 玩家从进入栏杆前 50 像素到与栏杆接触时,若未按 E 键跳跃则强制判定跨栏失败(与速度窗口无关);2) 坐标系从百分比改为真实像素,栏杆间隔 500 像素;3) 跑道改为滚动显示,运动员始终固定在屏幕左右居中位置。
问题分析
原 `JUMP_REQUIRE_DIST = 3.9` 是按百分比估算的 50 像素,但屏幕宽度 1280px 时实际距离约 50px,而分辨率变化或窗口 resize 后判定会失真。
原实现中每名选手独立 `position` 推动整个跑道滚动,9 个 lane 各自独立 translate,导致 9 条起跑线在屏幕上错开。
原判定只检查"是否在 8% 距离内"才允许跳跃,没有"50px 窗口内必须按"的硬性强制。
解决方案
1) 将 JUMP_REQUIRE_DIST 改为真实 50(像素),主循环中 r.position + JUMP_REQUIRE_DIST >= nh.left 且 !mustJump 时强制失败(栏杆倒下 + 速度降 0.3 倍 1 秒)。2) 引入 TRACK_LENGTH = 4500、HURDLE_SPACING = 500、HURDLE_START = 750、FINISH_LINE = 4250,9 根栏杆分别在 750/1250/1750/.../4250 像素位置。3) 改用 .lane-scroll 滚动层,所有 lane 共享同一个滚动基线(玩家 position),因此所有起跑线/终点线/栏杆在屏幕上完美对齐;运动员 position 改为 0~4250 的真实像素。