97 lines
2.1 KiB
Markdown
97 lines
2.1 KiB
Markdown
# 场景图系统示例 (Scene Graph Demo)
|
||
|
||
这个示例演示了 Extra2D 引擎场景图模块的核心功能。
|
||
|
||
## 功能演示
|
||
|
||
### 1. Director 场景管理
|
||
- 通过 `SceneModule` 获取 `Director`
|
||
- 使用 `runScene()` 启动场景
|
||
|
||
### 2. Scene 场景容器
|
||
- 继承 `Scene` 类创建自定义场景
|
||
- 实现 `onEnter()` 和 `onExit()` 生命周期方法
|
||
- 在 `update()` 中处理场景级逻辑
|
||
|
||
### 3. Node 节点层级
|
||
- 创建自定义节点类(`PlayerNode`, `RotatingDecoration`)
|
||
- 使用 `addChild()` 构建节点树
|
||
- 节点变换自动继承父节点
|
||
|
||
### 4. Component 组件系统
|
||
- `TransformComponent`: 位置、旋转、缩放、锚点
|
||
- `SpriteRenderer`: 2D 精灵渲染
|
||
- `CameraComponent`: 相机投影和视图
|
||
|
||
### 5. Transform 变换(含锚点)
|
||
- 归一化锚点设置 `[0,1]`
|
||
- 锚点影响旋转中心和位置参考点
|
||
- 世界变换自动计算
|
||
|
||
## 运行效果
|
||
|
||
- 蓝色方块(玩家)沿圆周运动
|
||
- 8个彩色小方块围绕中心旋转
|
||
- 每个小方块还有自转动画
|
||
|
||
## 构建和运行
|
||
|
||
```bash
|
||
# 配置(启用示例)
|
||
xmake f -p mingw --examples=true
|
||
|
||
# 构建
|
||
xmake
|
||
|
||
# 运行
|
||
./build/examples/scene_graph_demo/scene_graph_demo.exe
|
||
```
|
||
|
||
## 代码结构
|
||
|
||
```
|
||
scene_graph_demo/
|
||
├── main.cpp # 程序入口
|
||
├── game_scene.h # 场景和节点类定义
|
||
├── game_scene.cpp # 场景和节点实现
|
||
└── xmake.lua # 构建配置
|
||
```
|
||
|
||
## 关键 API
|
||
|
||
### 创建场景
|
||
```cpp
|
||
class GameScene : public Scene {
|
||
public:
|
||
void onEnter() override;
|
||
void update(float dt) override;
|
||
};
|
||
|
||
auto scene = makePtr<GameScene>();
|
||
director->runScene(scene);
|
||
```
|
||
|
||
### 创建节点
|
||
```cpp
|
||
auto node = makePtr<Node>();
|
||
node->setPosition(100, 200);
|
||
node->setAnchor(0.5f, 0.5f); // 中心锚点
|
||
node->setSize(64, 64);
|
||
scene->addChild(node);
|
||
```
|
||
|
||
### 添加组件
|
||
```cpp
|
||
auto sprite = makePtr<SpriteRenderer>();
|
||
sprite->setColor(Color::Red);
|
||
node->addComponent(sprite);
|
||
```
|
||
|
||
### 设置相机
|
||
```cpp
|
||
auto camera = makePtr<CameraComponent>();
|
||
camera->setOrtho(0, 1280, 0, 720, -1, 1);
|
||
cameraNode->addComponent(camera);
|
||
scene->setMainCamera(camera);
|
||
```
|