#pragma once #include using namespace extra2d; /** * @brief 玩家节点类 * * 演示如何创建自定义节点并添加组件 */ class PlayerNode : public Node { public: /** * @brief 构造函数 */ PlayerNode(); /** * @brief 析构函数 */ ~PlayerNode() override = default; /** * @brief 每帧更新 * @param dt 帧间隔时间 */ void onUpdate(float dt); /** * @brief 设置移动速度 * @param speed 速度 */ void setSpeed(float speed) { speed_ = speed; } /** * @brief 获取移动速度 * @return 速度 */ float getSpeed() const { return speed_; } private: float speed_ = 200.0f; float time_ = 0.0f; }; /** * @brief 旋转装饰节点 * * 演示节点层级关系和变换继承 */ class RotatingDecoration : public Node { public: /** * @brief 构造函数 */ RotatingDecoration(); /** * @brief 析构函数 */ ~RotatingDecoration() override = default; /** * @brief 每帧更新 * @param dt 帧间隔时间 */ void onUpdate(float dt); /** * @brief 设置旋转速度 * @param speed 旋转速度(度/秒) */ void setRotationSpeed(float speed) { rotationSpeed_ = speed; } private: float rotationSpeed_ = 90.0f; }; /** * @brief 游戏场景类 * * 演示场景图系统的核心功能: * - 节点层级管理 * - 组件系统 * - 相机设置 * - 场景生命周期 */ class GameScene : public Scene { public: /** * @brief 构造函数 */ GameScene(); /** * @brief 析构函数 */ ~GameScene() override = default; /** * @brief 场景进入时调用 * * 在这里创建所有游戏对象 */ void onEnter() override; /** * @brief 场景退出时调用 * * 在这里清理资源 */ void onExit() override; /** * @brief 每帧更新 * @param dt 帧间隔时间 */ void update(float dt) override; private: /** * @brief 创建玩家 */ void createPlayer(); /** * @brief 创建装饰物 */ void createDecorations(); /** * @brief 创建相机 */ void createCamera(); Ptr player_; std::vector> decorations_; float sceneTime_ = 0.0f; };