141 lines
2.4 KiB
C
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;
|
|||
|
|
};
|