2025-09-15 11:28:54 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
#include "EngineCore/Asset_ImagePack.h"
|
|
|
|
|
|
#include "EngineFrame/Component/Component.h"
|
2025-09-19 12:18:57 +08:00
|
|
|
|
#include "EngineFrame/Render/Texture.h"
|
2025-09-15 11:28:54 +08:00
|
|
|
|
|
|
|
|
|
|
class Game;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief Sprite类,继承自Component类,用于表示游戏中的精灵组件
|
|
|
|
|
|
*/
|
|
|
|
|
|
class Sprite : public Component
|
|
|
|
|
|
{
|
|
|
|
|
|
private:
|
|
|
|
|
|
/* data */
|
2025-09-18 15:21:43 +08:00
|
|
|
|
RefPtr<Texture> m_texture = nullptr;
|
2025-09-15 11:28:54 +08:00
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief Sprite类的默认构造函数
|
|
|
|
|
|
*/
|
|
|
|
|
|
Sprite(/* args */);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief Sprite类的带参数构造函数
|
|
|
|
|
|
* @param imgPath 纹理图片路径
|
|
|
|
|
|
* @param Index 索引值
|
|
|
|
|
|
*/
|
|
|
|
|
|
Sprite(std::string imgPath, int Index);
|
2025-09-19 12:18:57 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief Sprite类的带参数构造函数
|
|
|
|
|
|
* @param imgPath 纹理图片文件路径
|
|
|
|
|
|
*/
|
|
|
|
|
|
Sprite(std::string PngPath);
|
2025-09-15 11:28:54 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief Sprite类的析构函数
|
|
|
|
|
|
*/
|
|
|
|
|
|
~Sprite();
|
|
|
|
|
|
|
|
|
|
|
|
// 显式引入基类的Init方法,避免隐藏
|
|
|
|
|
|
using Component::Init;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 初始化Sprite组件
|
|
|
|
|
|
*/
|
2025-09-19 12:18:57 +08:00
|
|
|
|
void Init();
|
2025-09-15 11:28:54 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 处理事件
|
|
|
|
|
|
* @param e SDL事件指针
|
|
|
|
|
|
*/
|
|
|
|
|
|
void HandleEvents(SDL_Event *e) override;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 更新组件状态
|
|
|
|
|
|
* @param deltaTime 时间增量
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Update(float deltaTime) override;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 渲染组件
|
|
|
|
|
|
* @param deltaTime 时间增量
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Render(float deltaTime) override;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 清理组件资源
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Clear() override;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 获取纹理
|
|
|
|
|
|
* @return SDL_Texture* 纹理指针
|
|
|
|
|
|
*/
|
2025-09-18 15:21:43 +08:00
|
|
|
|
RefPtr<Texture> GetTexture();
|
2025-09-15 11:28:54 +08:00
|
|
|
|
|
|
|
|
|
|
public:
|
2025-09-19 12:18:57 +08:00
|
|
|
|
VecPos Pos = {0, 0}; // 位置坐标
|
|
|
|
|
|
VecSize TextureSize = {0, 0}; // 纹理大小
|
|
|
|
|
|
VecSize Size = {0, 0}; // 大小
|
|
|
|
|
|
VecPos Anchor = {0, 0}; // 中心点
|
2025-09-15 11:28:54 +08:00
|
|
|
|
float Angle = 0.0f; // 旋转角度
|
|
|
|
|
|
SDL_RendererFlip flip = SDL_FLIP_NONE; // 翻转
|
|
|
|
|
|
|
2025-09-18 15:21:43 +08:00
|
|
|
|
// 是否在需要渲染的屏幕上
|
|
|
|
|
|
bool isRenderScreen = true;
|
|
|
|
|
|
|
2025-09-15 11:28:54 +08:00
|
|
|
|
public:
|
|
|
|
|
|
// 设置坐标
|
2025-09-19 12:18:57 +08:00
|
|
|
|
void SetPos(VecPos pos);
|
2025-09-15 11:28:54 +08:00
|
|
|
|
// 设置混合模式
|
|
|
|
|
|
void SetBlendMode(SDL_BlendMode blendMode);
|
|
|
|
|
|
// 设置旋转角度
|
|
|
|
|
|
void SetAngle(float angle);
|
2025-09-18 15:21:43 +08:00
|
|
|
|
// 设置中心点
|
2025-09-19 12:18:57 +08:00
|
|
|
|
void SetAnchor(VecFPos anchor);
|
2025-09-18 15:21:43 +08:00
|
|
|
|
// 设置大小
|
2025-09-19 12:18:57 +08:00
|
|
|
|
void SetSize(VecSize size);
|
2025-09-15 11:28:54 +08:00
|
|
|
|
|
|
|
|
|
|
// 获取坐标
|
2025-09-19 12:18:57 +08:00
|
|
|
|
VecPos GetPos();
|
2025-09-15 11:28:54 +08:00
|
|
|
|
// 获取混合模式
|
|
|
|
|
|
SDL_BlendMode GetBlendMode();
|
|
|
|
|
|
// 获取旋转角度
|
|
|
|
|
|
float GetAngle();
|
|
|
|
|
|
// 获取中心点
|
2025-09-19 12:18:57 +08:00
|
|
|
|
VecFPos GetAnchor();
|
2025-09-18 15:21:43 +08:00
|
|
|
|
// 获取大小
|
2025-09-19 12:18:57 +08:00
|
|
|
|
VecSize GetSize();
|
2025-09-15 11:28:54 +08:00
|
|
|
|
};
|