Extra2D/examples/scene_graph_demo/game_scene.h

141 lines
2.4 KiB
C++

#pragma once
#include <extra2d.h>
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<PlayerNode> player_;
std::vector<Ptr<RotatingDecoration>> decorations_;
float sceneTime_ = 0.0f;
};