Extra2D/examples/scene_graph_demo/README.md

97 lines
2.1 KiB
Markdown
Raw 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.

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