添加默认和实例化着色器文件到场景图示例,包括顶点和片段着色器 修改构建脚本自动复制着色器文件到romfs目录 |
||
|---|---|---|
| .. | ||
| romfs/shader | ||
| README.md | ||
| game_scene.cpp | ||
| game_scene.h | ||
| instanced_test.cpp | ||
| instanced_test.h | ||
| main.cpp | ||
| xmake.lua | ||
README.md
场景图系统示例 (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个彩色小方块围绕中心旋转
- 每个小方块还有自转动画
构建和运行
# 配置(启用示例)
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
创建场景
class GameScene : public Scene {
public:
void onEnter() override;
void update(float dt) override;
};
auto scene = makePtr<GameScene>();
director->runScene(scene);
创建节点
auto node = makePtr<Node>();
node->setPosition(100, 200);
node->setAnchor(0.5f, 0.5f); // 中心锚点
node->setSize(64, 64);
scene->addChild(node);
添加组件
auto sprite = makePtr<SpriteRenderer>();
sprite->setColor(Color::Red);
node->addComponent(sprite);
设置相机
auto camera = makePtr<CameraComponent>();
camera->setOrtho(0, 1280, 0, 720, -1, 1);
cameraNode->addComponent(camera);
scene->setMainCamera(camera);