重构Actor类,添加变换矩阵计算和父子关系处理 - 添加本地和世界变换矩阵计算 - 实现锚点、旋转、缩放等变换属性 - 添加父子关系变换继承 - 优化子节点管理,支持按ZOrder排序 - 添加透明度继承功能
54 lines
1.2 KiB
Markdown
54 lines
1.2 KiB
Markdown
# 完善 Actor 旋转功能
|
|
|
|
## 问题描述
|
|
Actor 的 SetRotation 方法需要改进,增加角度规范化和相对旋转功能。
|
|
|
|
## 解决方案
|
|
|
|
### 1. 改进 SetRotation 方法
|
|
- 添加角度规范化到 [0, 360) 范围
|
|
- 使用已有的 `normalizeAngle360` 函数
|
|
|
|
### 2. 添加 RotateBy 方法
|
|
- 新增相对旋转方法,用于在当前角度基础上增加/减少角度
|
|
- 同样会进行角度规范化
|
|
|
|
## 实现步骤
|
|
|
|
### 文件修改
|
|
|
|
1. **Frostbite2D/include/frostbite2D/2d/actor.h**
|
|
- 在 `SetRotation` 方法声明后添加 `RotateBy` 方法声明
|
|
|
|
2. **Frostbite2D/src/frostbite2D/2d/actor.cpp**
|
|
- 改进 `SetRotation` 方法,添加角度规范化
|
|
- 实现 `RotateBy` 方法
|
|
|
|
## 代码变更
|
|
|
|
### actor.h 修改
|
|
在第 43 行后添加:
|
|
```cpp
|
|
void RotateBy(float deltaRotation);
|
|
```
|
|
|
|
### actor.cpp 修改
|
|
改进 SetRotation 方法(第 37-40 行):
|
|
```cpp
|
|
void Actor::SetRotation(float rotation) {
|
|
rotation_ = normalizeAngle360(rotation);
|
|
markTransformDirty();
|
|
}
|
|
```
|
|
|
|
添加 RotateBy 方法:
|
|
```cpp
|
|
void Actor::RotateBy(float deltaRotation) {
|
|
rotation_ = normalizeAngle360(rotation_ + deltaRotation);
|
|
markTransformDirty();
|
|
}
|
|
```
|
|
|
|
## 验证
|
|
- 运行 `xmake build` 确保项目编译通过
|