# 场景图系统示例 (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(); director->runScene(scene); ``` ### 创建节点 ```cpp auto node = makePtr(); node->setPosition(100, 200); node->setAnchor(0.5f, 0.5f); // 中心锚点 node->setSize(64, 64); scene->addChild(node); ``` ### 添加组件 ```cpp auto sprite = makePtr(); sprite->setColor(Color::Red); node->addComponent(sprite); ``` ### 设置相机 ```cpp auto camera = makePtr(); camera->setOrtho(0, 1280, 0, 720, -1, 1); cameraNode->addComponent(camera); scene->setMainCamera(camera); ```