2026-03-02 04:50:28 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <extra2d.h>
|
2026-03-03 03:48:55 +08:00
|
|
|
|
#include "instanced_test.h"
|
2026-03-02 04:50:28 +08:00
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
|
2026-03-03 03:48:55 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 创建实例化渲染测试
|
|
|
|
|
|
*/
|
|
|
|
|
|
void createInstancedTest();
|
|
|
|
|
|
|
2026-03-02 04:50:28 +08:00
|
|
|
|
Ptr<PlayerNode> player_;
|
|
|
|
|
|
std::vector<Ptr<RotatingDecoration>> decorations_;
|
2026-03-03 03:48:55 +08:00
|
|
|
|
Ptr<InstancedTestNode> instancedTest_;
|
2026-03-02 04:50:28 +08:00
|
|
|
|
float sceneTime_ = 0.0f;
|
|
|
|
|
|
};
|