162 lines
4.5 KiB
Markdown
162 lines
4.5 KiB
Markdown
# 🧪 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文本编辑功能应该可以正常工作了!🎉 |