test_ball_anti_trap.js 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * 小球防围困机制测试脚本
  3. * 用于测试小球在完全垂直或水平方向下是否能有效避免来回弹跳
  4. */
  5. console.log('=== 小球防围困机制测试 ===');
  6. console.log('测试目标:验证小球在完全垂直或水平方向下的防围困效果');
  7. console.log('');
  8. // 测试配置
  9. const testConfig = {
  10. // 防围困参数
  11. antiTrapTimeWindow: 5.0, // 时间窗口(秒)
  12. antiTrapHitThreshold: 5, // 撞击次数阈值
  13. deflectionAttemptThreshold: 3, // 偏移尝试次数阈值
  14. antiTrapDeflectionMultiplier: 3.0, // 偏移倍数
  15. // 测试参数
  16. testDuration: 30, // 测试持续时间(秒)
  17. expectedDirections: ['向上', '向下', '向左', '向右']
  18. };
  19. console.log('测试配置:');
  20. console.log(`- 防围困时间窗口: ${testConfig.antiTrapTimeWindow}秒`);
  21. console.log(`- 撞击次数阈值: ${testConfig.antiTrapHitThreshold}次`);
  22. console.log(`- 偏移尝试阈值: ${testConfig.deflectionAttemptThreshold}次`);
  23. console.log(`- 偏移增强倍数: ${testConfig.antiTrapDeflectionMultiplier}倍`);
  24. console.log(`- 测试持续时间: ${testConfig.testDuration}秒`);
  25. console.log('');
  26. // 测试步骤说明
  27. console.log('测试步骤:');
  28. console.log('1. 确保BallController.ts中的testMode设置为true');
  29. console.log('2. 在游戏中放置一些方块,形成可能导致小球来回弹跳的布局');
  30. console.log('3. 启动小球,观察控制台输出');
  31. console.log('4. 记录防围困机制的触发情况');
  32. console.log('');
  33. // 预期结果
  34. console.log('预期结果:');
  35. console.log('✅ 小球初始方向应该是完全垂直或水平的(向上/向下/向左/向右)');
  36. console.log('✅ 当小球在短时间内多次撞击同一区域时,应该触发防围困机制');
  37. console.log('✅ 防围困机制应该先尝试偏移反弹,如果偏移无效则启用穿透模式');
  38. console.log('✅ 控制台应该显示详细的防围困状态信息');
  39. console.log('');
  40. // 观察要点
  41. console.log('观察要点:');
  42. console.log('🔍 小球初始方向是否为四个基本方向之一');
  43. console.log('🔍 撞击统计是否正确累计(在时间窗口内)');
  44. console.log('🔍 达到阈值时是否正确触发防围困机制');
  45. console.log('🔍 偏移反弹是否改变了小球方向');
  46. console.log('🔍 穿透模式是否让小球暂时忽略碰撞');
  47. console.log('🔍 防围困机制是否有效解决了来回弹跳问题');
  48. console.log('');
  49. // 常见问题排查
  50. console.log('常见问题排查:');
  51. console.log('❌ 如果小球方向不是基本方向 -> 检查initializeDirection()中的testMode是否为true');
  52. console.log('❌ 如果没有防围困日志 -> 检查方块碰撞体设置,确保group=2');
  53. console.log('❌ 如果防围困无效 -> 调整antiTrapHitThreshold和antiTrapTimeWindow参数');
  54. console.log('❌ 如果偏移效果不明显 -> 增加antiTrapDeflectionMultiplier值');
  55. console.log('');
  56. // 性能监控建议
  57. console.log('性能监控建议:');
  58. console.log('📊 监控ballHitHistory的大小,避免内存泄漏');
  59. console.log('📊 观察防围困机制的触发频率,避免过于频繁');
  60. console.log('📊 检查穿透模式的持续时间是否合适(当前0.5秒)');
  61. console.log('');
  62. // 参数调优建议
  63. console.log('参数调优建议:');
  64. console.log('⚙️ 如果防围困触发太频繁 -> 增加antiTrapHitThreshold或减少antiTrapTimeWindow');
  65. console.log('⚙️ 如果防围困触发太少 -> 减少antiTrapHitThreshold或增加antiTrapTimeWindow');
  66. console.log('⚙️ 如果偏移效果不够 -> 增加antiTrapDeflectionMultiplier');
  67. console.log('⚙️ 如果穿透时间太短 -> 在代码中增加穿透持续时间(当前0.5秒)');
  68. console.log('');
  69. console.log('=== 开始测试,请在游戏中启动小球并观察控制台输出 ===');
  70. // 导出测试配置供其他脚本使用
  71. if (typeof module !== 'undefined' && module.exports) {
  72. module.exports = testConfig;
  73. }