Half-volleys: a rising ball is always scoopable; scoreboard tap shows the swing log
Field data (miss log) showed the dominant unfair miss: the assist parks you on the landing spot, the ball spends the whole swing window below minY rising off the bounce at your feet, and becomes hittable one frame after the window closes. Root fix: the below-ankles rejection now only applies to a DROPPING ball — rising post-bounce balls can be scooped at any height (a half-volley). Feet-bounce taps go from ~0 to 19/30 winning frames; 30 simulated real points now log 50 hits, 0 whiffs. Also: swing-log snapshots record the same swing-timer value trySwing tests (removes the one-frame misclassification behind 'unclassified'), and tapping the scoreboard toggles an on-screen dump of the last 9 log entries so live situations can be screenshotted from the phone. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d6d00929bb
commit
8fd5055e5c
4 files changed
+17
-3
No files matched your search
@@ -294,5 +294,16 @@ export function render() {
|
||||
ctx.font = 'bold 8px monospace'; ctx.fillStyle = '#ff9060';
|
||||
ctx.fillText(G.lastMiss.text.toUpperCase(), W / 2, H - 28);
|
||||
}
|
||||
if (G.logShow) { // scoreboard tap: recent swing diagnostics, screenshot-friendly
|
||||
const list = G.missLog.slice(-9), lh = 10, top = 40;
|
||||
ctx.fillStyle = 'rgba(8,10,16,0.88)'; ctx.fillRect(6, top, W - 12, list.length * lh + 16);
|
||||
ctx.font = 'bold 7px monospace'; ctx.textAlign = 'left';
|
||||
ctx.fillStyle = '#8fa0b8'; ctx.fillText('SWING LOG — tap scoreboard to hide', 10, top + 5);
|
||||
const maxCh = Math.floor((W - 20) / 4.3);
|
||||
list.forEach((e, i) => {
|
||||
ctx.fillStyle = e.result === 'HIT' ? '#7fd07f' : '#ff9060';
|
||||
ctx.fillText((e.at + 's ' + e.result + ' ' + e.reason).slice(0, maxCh), 10, top + 16 + i * lh);
|
||||
});
|
||||
}
|
||||
ctx.textAlign = 'left';
|
||||
}
|
||||
Reference in new issue
Block a user