Extra2D/examples/scene_graph_demo/README.md

97 lines
2.1 KiB
Markdown
Raw Normal View History

# 场景图系统示例 (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);
```