/** * 小球防围困机制测试脚本 * 用于测试小球在完全垂直或水平方向下是否能有效避免来回弹跳 */ console.log('=== 小球防围困机制测试 ==='); console.log('测试目标:验证小球在完全垂直或水平方向下的防围困效果'); console.log(''); // 测试配置 const testConfig = { // 防围困参数 antiTrapTimeWindow: 5.0, // 时间窗口(秒) antiTrapHitThreshold: 5, // 撞击次数阈值 deflectionAttemptThreshold: 3, // 偏移尝试次数阈值 antiTrapDeflectionMultiplier: 3.0, // 偏移倍数 // 测试参数 testDuration: 30, // 测试持续时间(秒) expectedDirections: ['向上', '向下', '向左', '向右'] }; console.log('测试配置:'); console.log(`- 防围困时间窗口: ${testConfig.antiTrapTimeWindow}秒`); console.log(`- 撞击次数阈值: ${testConfig.antiTrapHitThreshold}次`); console.log(`- 偏移尝试阈值: ${testConfig.deflectionAttemptThreshold}次`); console.log(`- 偏移增强倍数: ${testConfig.antiTrapDeflectionMultiplier}倍`); console.log(`- 测试持续时间: ${testConfig.testDuration}秒`); console.log(''); // 测试步骤说明 console.log('测试步骤:'); console.log('1. 确保BallController.ts中的testMode设置为true'); console.log('2. 在游戏中放置一些方块,形成可能导致小球来回弹跳的布局'); console.log('3. 启动小球,观察控制台输出'); console.log('4. 记录防围困机制的触发情况'); console.log(''); // 预期结果 console.log('预期结果:'); console.log('✅ 小球初始方向应该是完全垂直或水平的(向上/向下/向左/向右)'); console.log('✅ 当小球在短时间内多次撞击同一区域时,应该触发防围困机制'); console.log('✅ 防围困机制应该先尝试偏移反弹,如果偏移无效则启用穿透模式'); console.log('✅ 控制台应该显示详细的防围困状态信息'); console.log(''); // 观察要点 console.log('观察要点:'); console.log('🔍 小球初始方向是否为四个基本方向之一'); console.log('🔍 撞击统计是否正确累计(在时间窗口内)'); console.log('🔍 达到阈值时是否正确触发防围困机制'); console.log('🔍 偏移反弹是否改变了小球方向'); console.log('🔍 穿透模式是否让小球暂时忽略碰撞'); console.log('🔍 防围困机制是否有效解决了来回弹跳问题'); console.log(''); // 常见问题排查 console.log('常见问题排查:'); console.log('❌ 如果小球方向不是基本方向 -> 检查initializeDirection()中的testMode是否为true'); console.log('❌ 如果没有防围困日志 -> 检查方块碰撞体设置,确保group=2'); console.log('❌ 如果防围困无效 -> 调整antiTrapHitThreshold和antiTrapTimeWindow参数'); console.log('❌ 如果偏移效果不明显 -> 增加antiTrapDeflectionMultiplier值'); console.log(''); // 性能监控建议 console.log('性能监控建议:'); console.log('📊 监控ballHitHistory的大小,避免内存泄漏'); console.log('📊 观察防围困机制的触发频率,避免过于频繁'); console.log('📊 检查穿透模式的持续时间是否合适(当前0.5秒)'); console.log(''); // 参数调优建议 console.log('参数调优建议:'); console.log('⚙️ 如果防围困触发太频繁 -> 增加antiTrapHitThreshold或减少antiTrapTimeWindow'); console.log('⚙️ 如果防围困触发太少 -> 减少antiTrapHitThreshold或增加antiTrapTimeWindow'); console.log('⚙️ 如果偏移效果不够 -> 增加antiTrapDeflectionMultiplier'); console.log('⚙️ 如果穿透时间太短 -> 在代码中增加穿透持续时间(当前0.5秒)'); console.log(''); console.log('=== 开始测试,请在游戏中启动小球并观察控制台输出 ==='); // 导出测试配置供其他脚本使用 if (typeof module !== 'undefined' && module.exports) { module.exports = testConfig; }