EG/demo/GUI_TESTING_README.md
2025-07-02 09:49:59 +08:00

4.5 KiB
Raw Blame History

🧪 GUI功能测试和故障排除指南

📋 问题修复说明

已经修复了GUI文本编辑功能中的TextNode导入问题和逻辑错误。现在GUI文本编辑应该可以正常工作了。

🔧 主要修复内容

1. 导入问题修复

  • editGUIElement方法中添加了TextNode导入
  • 解决了"name 'TextNode' is not defined"错误

2. 编辑逻辑优化

  • 3D文本: 直接修改自身的TextNode因为3D文本本身就是TextNode
  • 虚拟屏幕: 查找TextNode子节点并修改其内容
  • 2D GUI: 使用标准的DirectGUI属性修改方式

3. 调试信息增强

  • 添加了详细的调试输出
  • 显示节点类型和子节点信息
  • 便于排查问题

🎯 如何测试GUI功能

方法1: 使用主程序测试

  1. 运行python3 test.py
  2. 通过菜单或工具栏创建GUI元素
    • GUI菜单 → 创建按钮/标签/3D文本/虚拟屏幕
    • 或点击工具栏中的GUI创建按钮
  3. 在场景树中选择GUI元素
  4. 在属性面板中编辑文本内容
  5. 检查GUI元素是否实时更新

方法2: 使用测试脚本

python3 test_gui_edit.py

测试脚本提供以下功能:

  • Space循环测试所有GUI元素的文本编辑
  • 1键:单独测试按钮文本编辑
  • 2键:单独测试标签文本编辑
  • 3单独测试3D文本编辑

🔍 故障排除

常见问题和解决方案

1. "TextNode未定义"错误

症状: 控制台显示"name 'TextNode' is not defined" 解决: 已修复,确保使用最新版本的代码

2. 3D文本无法编辑

症状: 3D文本创建成功但编辑时文本不变化 排查步骤:

  1. 检查控制台输出,查看是否显示"成功更新3D文本"
  2. 确认3D文本的节点类型是TextNode
  3. 查看调试信息中的节点类型报告

3. 虚拟屏幕文本无法编辑

症状: 虚拟屏幕的文本内容不更新 排查步骤:

  1. 查看控制台输出中的子节点数量
  2. 检查是否找到TextNode类型的子节点
  3. 确认虚拟屏幕创建时正确添加了文本子节点

4. 属性面板编辑无响应

症状: 在属性面板中输入文本但GUI不更新 排查步骤:

  1. 检查场景树中是否正确选中了GUI元素
  2. 确认GUI元素的类型标签设置正确
  3. 查看控制台是否有错误信息

🧪 测试用例

测试用例1: 2D GUI文本编辑

# 创建按钮
button = world.createGUIButton(pos=(0, 0, 0.5), text="原始按钮")

# 编辑文本
success = world.editGUIElement(button, "text", "修改后的按钮")

# 期望结果: 按钮显示"修改后的按钮"

测试用例2: 3D文本编辑

# 创建3D文本
text3d = world.createGUI3DText(pos=(0, 5, 2), text="原始3D文本")

# 编辑文本
success = world.editGUIElement(text3d, "text", "修改后的3D文本")

# 期望结果: 3D文本显示"修改后的3D文本"

测试用例3: 虚拟屏幕文本编辑

# 创建虚拟屏幕
screen = world.createGUIVirtualScreen(pos=(3, 5, 0), text="原始屏幕文本")

# 编辑文本
success = world.editGUIElement(screen, "text", "修改后的屏幕文本")

# 期望结果: 虚拟屏幕显示"修改后的屏幕文本"

📊 调试输出示例

正常工作的输出

开始编辑GUI元素: 类型=button, 属性=text, 值=新按钮文本
成功更新2D GUI文本: 新按钮文本
编辑GUI元素 button: text = 新按钮文本

3D文本编辑输出

开始编辑GUI元素: 类型=3d_text, 属性=text, 值=新3D文本
成功更新3D文本: 新3D文本
编辑GUI元素 3d_text: text = 新3D文本

虚拟屏幕编辑输出

开始编辑GUI元素: 类型=virtual_screen, 属性=text, 值=新屏幕文本
虚拟屏幕有 1 个子节点
子节点 0: screen-text-0, 类型: <class 'panda3d.core.TextNode'>
成功更新虚拟屏幕文本: 新屏幕文本
编辑GUI元素 virtual_screen: text = 新屏幕文本

🚀 进一步测试建议

  1. 批量测试: 创建多个GUI元素并逐一测试编辑功能
  2. 交互测试: 测试右键菜单的编辑功能
  3. 属性面板测试: 测试实时属性编辑
  4. 复制功能测试: 测试GUI元素的复制功能
  5. 删除功能测试: 确保删除功能正常工作

💡 开发提示

如果需要添加新的GUI类型请确保

  1. 在创建时正确设置gui_type标签
  2. editGUIElement中添加对应的编辑逻辑
  3. updateGUIPropertyPanel中添加属性面板支持
  4. 编写相应的测试用例

现在GUI文本编辑功能应该可以正常工作了🎉