![]() |
ShitEngine 1.4.2
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
|
2D 瓦片地图组件 更多...
#include <Tilemap.h>
Public 成员函数 | |
| Tilemap () | |
| ~Tilemap () override | |
| void | onAfterDeserialize () override |
| 反序列化完成后回调(Prefab::apply 逐组件调用一次,字段已写入)。 用于重建"直写字段绕过了 setter、无法自动触发的引擎状态"(如精灵纹理加载)。 | |
| void | onFieldChanged (const std::string &fieldName) override |
| 检查器直接写反射字段后回调(字段名)。用于绕过 setter 的直写完成后 重新同步引擎状态(如 Box2D 刚体/形状)。默认无操作。 | |
| void | onRender (SDL_Renderer *renderer, const CameraComponent *camera) const override |
| 按相机绘制网格(RendererComponent 纯虚实现) | |
| SDL_FRect | getGlobalBounds () override |
| 世界坐标轴对齐包围盒(覆盖整个网格) | |
| void | setTexturePath (const std::string &path) |
| const std::string & | getTexturePath () const |
| void | setTileSize (int w, int h) |
| 设置单个瓦片纹理像素尺寸 | |
| int | getTileWidth () const |
| int | getTileHeight () const |
| void | setGridSize (int cols, int rows) |
| 调整网格行列数(保留重叠部分数据) | |
| int | getGridWidth () const |
| int | getGridHeight () const |
| void | setTileWorldSize (const Vector2 &size) |
| 每格世界尺寸(默认=瓦片像素) | |
| const Vector2 & | getTileWorldSize () const |
| void | setTile (int col, int row, int tileId) |
| 放置瓦片(-1 擦除) | |
| int | getTile (int col, int row) const |
| 读取瓦片(越界返回 -1) | |
| void | clear () |
| 全部擦除 | |
| bool | isEmpty () const |
| 是否全空 | |
| int | getTileCount () const |
| 当前瓦片数量(非空格) | |
| const std::string & | getGridData () const |
| void | setGridData (const std::string &data) |
| 反序列化用:解析外部字符串(含尺寸头) | |
| Public 成员函数 继承自 RendererComponent | |
| RendererComponent () | |
| ~RendererComponent () override=default | |
| void | onAttach () override |
| void | onDetach () override |
| void | onDestroy () override |
| int | getZIndex () const |
| 渲染层级,值越大越靠上 | |
| bool | isVisible () const |
| 是否可见 | |
| void | setZIndex (int zIndex) |
| void | setVisible (bool isVisible) |
| Public 成员函数 继承自 Component | |
| Component () | |
| virtual | ~Component ()=default |
| virtual void | onCreate () |
| Component (const Component &)=delete | |
| Component & | operator= (const Component &)=delete |
| Component (Component &&)=delete | |
| Component & | operator= (Component &&)=delete |
| GameObject * | getOwner () const |
| bool | isRegistered () const |
| uint64_t | getUuid () const |
| 组件持久 ID(随 .scene 序列化,是 ComponentRef<T> 引用字段的寻址依据) | |
| void | setUuid (uint64_t uuid) |
| 直接设置组件 ID(仅引擎反序列化/索引维护使用;正常流程由构造函数随机分配) | |
友元 | |
| class | TilemapDrawTool |
额外继承的成员函数 | |
| Protected 成员函数 继承自 Component | |
| void | setRegistered (bool registered) |
| Protected 属性 继承自 RendererComponent | |
| int | m_zIndex = 0 |
| bool | m_isVisible = true |
| Protected 属性 继承自 Component | |
| GameObject * | m_owner = nullptr |
| bool | m_isRegistered = false |
| uint64_t | m_uuid = 0 |
| 持久 ID(构造时随机分配;0 仅在序列化前尚未赋值时短暂存在) | |
2D 瓦片地图组件
把一张瓦片集纹理(sprite sheet)按 m_gridWidth×m_gridHeight 网格铺排成地图。 网格左上角对齐 GameObject 的 Transform 位置,每个格子从纹理裁取对应瓦片绘制。
瓦片 id 语义: -1 = 空格(不绘制) ≥0 = 瓦片索引,映射到纹理的 (id % 每行数, id / 每行数) 源矩形
网格数据以反射字符串字段 m_gridData 持久化(逗号分隔的瓦片 id,序列化器原生 支持 std::string),运行时用 m_tiles(std::vector<int>)高效存储;onAfterDeserialize 把 m_gridData 解析到 m_tiles。编辑器/脚本通过 setTile / resize 修改并自动同步 m_gridData。
| Tilemap | ( | ) |
|
override |
| void clear | ( | ) |
全部擦除
|
overridevirtual |
世界坐标轴对齐包围盒(覆盖整个网格)
实现了 RendererComponent.
|
inline |
|
inline |
|
inline |
|
inline |
| int getTile | ( | int | col, |
| int | row ) const |
读取瓦片(越界返回 -1)
| int getTileCount | ( | ) | const |
当前瓦片数量(非空格)
|
inline |
|
inline |
|
inline |
| bool isEmpty | ( | ) | const |
是否全空
|
overridevirtual |
反序列化完成后回调(Prefab::apply 逐组件调用一次,字段已写入)。 用于重建"直写字段绕过了 setter、无法自动触发的引擎状态"(如精灵纹理加载)。
重载 Component .
|
overridevirtual |
检查器直接写反射字段后回调(字段名)。用于绕过 setter 的直写完成后 重新同步引擎状态(如 Box2D 刚体/形状)。默认无操作。
重载 Component .
|
overridevirtual |
按相机绘制网格(RendererComponent 纯虚实现)
实现了 RendererComponent.
| void setGridData | ( | const std::string & | data | ) |
反序列化用:解析外部字符串(含尺寸头)
| void setGridSize | ( | int | cols, |
| int | rows ) |
调整网格行列数(保留重叠部分数据)
| void setTexturePath | ( | const std::string & | path | ) |
| void setTile | ( | int | col, |
| int | row, | ||
| int | tileId ) |
放置瓦片(-1 擦除)
| void setTileSize | ( | int | w, |
| int | h ) |
设置单个瓦片纹理像素尺寸
| void setTileWorldSize | ( | const Vector2 & | size | ) |
每格世界尺寸(默认=瓦片像素)
|
friend |