本指南介绍如何测试小球的防围困机制,特别是在完全垂直或水平方向下的表现。防围困机制旨在防止小球在狭窄空间内来回弹跳,提升游戏体验。
在 BallController 组件中,新增了 testMode 属性:
测试模式下,小球初始方向被限制为:
测试模式会在控制台输出详细信息:
确保测试模式开启
Test Mode 复选框已勾选设置测试场景
启动游戏
观察初始方向
监控防围困机制
布局:创建垂直狭窄通道
期望:小球垂直移动时遇到阻碍能够偏移脱困
观察:偏移反弹是否改变方向
布局:创建水平狭窄通道
期望:小球水平移动时遇到阻碍能够偏移脱困
观察:偏移反弹是否改变方向
布局:创建L形或U形陷阱
期望:小球被困时能够通过穿透模式脱困
观察:穿透模式是否正常工作
✅ 初始方向正确: 小球按四个基本方向之一移动
✅ 撞击统计准确: 控制台显示正确的撞击计数
✅ 防围困触发: 达到阈值时正确触发机制
✅ 偏移有效: 偏移反弹改变小球方向
✅ 穿透工作: 穿透模式让小球暂时忽略碰撞
✅ 脱困成功: 小球能够从陷阱中脱困
✅ 振荡检测: 小球在长距离墙体或方块间来回弹跳时能被检测并干预
✅ 智能冲量: 水平振荡时给予垂直冲量,垂直振荡时给予水平冲量
✅ 增强日志: 控制台输出详细的振荡检测信息和干预记录
❌ 方向异常: 小球方向不是基本方向 → 检查testMode设置
❌ 无防围困日志: 没有撞击统计输出 → 检查方块碰撞体group设置
❌ 防围困无效: 小球仍然来回弹跳 → 调整参数阈值
❌ 偏移无效: 方向改变不明显 → 增加偏移倍数
❌ 振荡检测失效: 检查oscillationDistanceThreshold是否过大或过小
❌ 冲量过强: 调整冲量系数(当前为baseSpeed * 0.8)
❌ 检测过敏: 增加directionChangeThreshold或oscillationTimeWindow
antiTrapHitThreshold(如改为3-4次)antiTrapHitThreshold(如改为6-8次)antiTrapTimeWindow(如改为6-8秒)antiTrapDeflectionMultiplier(如改为4-5倍)directionChangeThreshold(2-6次)oscillationTimeWindow(2-5秒)positionHistorySize(10-30个)oscillationDistanceThreshold(50-200像素)问题:防围困触发太频繁
解决:增加 antiTrapHitThreshold 或减少 antiTrapTimeWindow
问题:小球长时间被困才触发
解决:减少 antiTrapHitThreshold 或增加 antiTrapTimeWindow
问题:偏移后仍然容易被困
解决:增加 antiTrapDeflectionMultiplier
问题:穿透时间过短或过长
解决:修改代码中的穿透持续时间(当前0.5秒)
运行 test_ball_anti_trap.js 获取详细的测试指导和配置信息:
node test_ball_anti_trap.js
// 在浏览器控制台中运行
startAntiTrapTest();
// 测试长距离振荡检测功能
startEnhancedAntiTrapTest();
// 30秒快速基础测试
quickAntiTrapTest();
// 30秒快速增强测试
quickEnhancedAntiTrapTest();
测试完成后,记得关闭测试模式:
Test Mode