ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
Toggle main menu visibility
载入中...
搜索中...
未找到
SpriteRenderer.h
浏览该文件的文档.
1
#pragma once
2
#include "
../Core/Config.h
"
3
#include "
RendererComponent.h
"
4
#include "
../Render/Sprite.h
"
5
6
#include <optional>
7
#include <SDL3/SDL_rect.h>
8
9
struct
SDL_Texture;
10
11
namespace
Shit
{
12
class
CameraComponent
;
13
class
GameObject
;
14
22
class
SHIT_API
SHIT_REFLECT
(BlackList)
SpriteRenderer
:
public
RendererComponent
{
23
friend
class
GameObject
;
24
SHIT_REFLECT_BODY
(
SpriteRenderer
)
25
public
:
26
SpriteRenderer
() =
default
;
27
~SpriteRenderer
()
override
=
default
;
28
29
void
onRender
(SDL_Renderer* renderer,
const
CameraComponent
* camera)
const override
;
30
31
// --- setter & getter ---
32
void
setTexturePath
(
const
std::string& texturePath);
// 非内联:含纹理存在性检查
33
const
std::string&
getTexturePath
()
const
{
return
m_sprite.getTexturePath(); }
34
35
void
setSourceRect
(
const
std::optional<SDL_FRect>& sourceRect) { m_sprite.setSourceRect(sourceRect); }
36
const
std::optional<SDL_FRect>&
getSourceRect
()
const
{
return
m_sprite.getSourceRect(); }
37
38
void
setFlipped
(
bool
flipped) { m_sprite.setFlipped(flipped); }
39
bool
isFlipped
()
const
{
return
m_sprite.isFlipped(); }
40
41
void
onAfterDeserialize
()
override
;
// 反序列化后按 m_texturePath 重载纹理
42
43
SDL_FRect
getGlobalBounds
()
override
;
44
private
:
45
SHIT_META
(({.displayName =
"Texture Path"
, .tooltip =
"纹理文件路径(持久化;反序列化后自动重载)"
}))
46
std::string m_texturePath;
47
SHIT_META
(({.displayName =
"Sprite Data"
, .readOnly =
true
}))
48
Sprite m_sprite;
49
};
50
}
Config.h
SHIT_API
#define SHIT_API
定义
Core.h:14
SHIT_REFLECT_BODY
#define SHIT_REFLECT_BODY(Type)
定义
Macros.h:62
SHIT_REFLECT
#define SHIT_REFLECT(Mode)
定义
Macros.h:59
SHIT_META
#define SHIT_META(...)
定义
Macros.h:68
RendererComponent.h
Sprite.h
Shit::CameraComponent
相机组件,定义"从哪个角度观察世界"
定义
CameraComponent.h:16
Shit::GameObject
游戏物体类
定义
GameObject.h:23
Shit::RendererComponent::RendererComponent
RendererComponent()
Shit::SpriteRenderer::GameObject
friend class GameObject
定义
SpriteRenderer.h:23
Shit::SpriteRenderer::getGlobalBounds
SDL_FRect getGlobalBounds() override
世界坐标下的轴对齐包围盒
Shit::SpriteRenderer::setTexturePath
void setTexturePath(const std::string &texturePath)
Shit::SpriteRenderer::SpriteRenderer
SpriteRenderer()=default
Shit::SpriteRenderer::setSourceRect
void setSourceRect(const std::optional< SDL_FRect > &sourceRect)
定义
SpriteRenderer.h:35
Shit::SpriteRenderer::onAfterDeserialize
void onAfterDeserialize() override
反序列化完成后回调(Prefab::apply 逐组件调用一次,字段已写入)。 用于重建"直写字段绕过了 setter、无法自动触发的引擎状态"(如精灵纹理加载)。
Shit::SpriteRenderer::~SpriteRenderer
~SpriteRenderer() override=default
Shit::SpriteRenderer::getTexturePath
const std::string & getTexturePath() const
定义
SpriteRenderer.h:33
Shit::SpriteRenderer::getSourceRect
const std::optional< SDL_FRect > & getSourceRect() const
定义
SpriteRenderer.h:36
Shit::SpriteRenderer::setFlipped
void setFlipped(bool flipped)
定义
SpriteRenderer.h:38
Shit::SpriteRenderer::onRender
void onRender(SDL_Renderer *renderer, const CameraComponent *camera) const override
纯虚:子类实现绘制逻辑
Shit::SpriteRenderer::isFlipped
bool isFlipped() const
定义
SpriteRenderer.h:39
Shit
定义
AudioPlayer.h:10
include
ShitEngine
Component
SpriteRenderer.h
制作者
1.17.0