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

162 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🧪 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: 使用测试脚本
```bash
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文本编辑
```python
# 创建按钮
button = world.createGUIButton(pos=(0, 0, 0.5), text="原始按钮")
# 编辑文本
success = world.editGUIElement(button, "text", "修改后的按钮")
# 期望结果: 按钮显示"修改后的按钮"
```
### 测试用例2: 3D文本编辑
```python
# 创建3D文本
text3d = world.createGUI3DText(pos=(0, 5, 2), text="原始3D文本")
# 编辑文本
success = world.editGUIElement(text3d, "text", "修改后的3D文本")
# 期望结果: 3D文本显示"修改后的3D文本"
```
### 测试用例3: 虚拟屏幕文本编辑
```python
# 创建虚拟屏幕
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文本编辑功能应该可以正常工作了🎉