test_enemy_health_fix.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * 测试敌人血量显示修复效果
  3. * 用于验证僵尸短时间被多个植物击中后血量显示是否正常
  4. */
  5. const { find } = require('cc');
  6. // 测试函数:模拟多次快速伤害
  7. function testMultipleDamage() {
  8. console.log('=== 开始测试敌人血量显示修复 ===');
  9. // 查找敌人控制器
  10. const enemyControllerNode = find('Canvas/GameLevelUI/EnemyController');
  11. if (!enemyControllerNode) {
  12. console.error('未找到EnemyController节点');
  13. return;
  14. }
  15. const enemyController = enemyControllerNode.getComponent('EnemyController');
  16. if (!enemyController) {
  17. console.error('未找到EnemyController组件');
  18. return;
  19. }
  20. // 获取当前活跃的敌人
  21. const activeEnemies = enemyController.getActiveEnemies();
  22. if (activeEnemies.length === 0) {
  23. console.log('当前没有活跃的敌人,请先生成敌人');
  24. return;
  25. }
  26. const testEnemy = activeEnemies[0];
  27. const enemyInstance = testEnemy.getComponent('EnemyInstance');
  28. if (!enemyInstance) {
  29. console.error('敌人节点没有EnemyInstance组件');
  30. return;
  31. }
  32. console.log(`测试目标: ${enemyInstance.getEnemyName()}`);
  33. console.log(`初始血量: ${enemyInstance.health}/${enemyInstance.maxHealth}`);
  34. // 模拟短时间内多次受伤
  35. const damages = [5, 3, 7, 2, 4]; // 不同的伤害值
  36. let delay = 0;
  37. damages.forEach((damage, index) => {
  38. setTimeout(() => {
  39. if (enemyInstance && enemyInstance.node && enemyInstance.node.isValid) {
  40. console.log(`第${index + 1}次伤害: ${damage}`);
  41. enemyInstance.takeDamage(damage, Math.random() > 0.8); // 20%暴击率
  42. console.log(`当前血量: ${enemyInstance.health}/${enemyInstance.maxHealth}`);
  43. }
  44. }, delay);
  45. delay += 100; // 每次间隔100毫秒
  46. });
  47. // 5秒后检查最终状态
  48. setTimeout(() => {
  49. if (enemyInstance && enemyInstance.node && enemyInstance.node.isValid) {
  50. console.log('=== 测试完成 ===');
  51. console.log(`最终血量: ${enemyInstance.health}/${enemyInstance.maxHealth}`);
  52. console.log('如果血量显示正常且动画流畅,说明修复成功');
  53. } else {
  54. console.log('敌人已被消灭');
  55. }
  56. }, 5000);
  57. }
  58. // 导出测试函数
  59. if (typeof module !== 'undefined' && module.exports) {
  60. module.exports = { testMultipleDamage };
  61. }
  62. // 如果在浏览器环境中直接运行
  63. if (typeof window !== 'undefined') {
  64. window.testEnemyHealthFix = testMultipleDamage;
  65. console.log('测试函数已挂载到 window.testEnemyHealthFix()');
  66. }
  67. console.log('敌人血量显示修复测试脚本已加载');
  68. console.log('使用方法: 在游戏中生成敌人后,调用 testMultipleDamage() 函数进行测试');