# MyEngine
**Repository Path**: CatIsNotFound/MyEngine
## Basic Information
- **Project Name**: MyEngine
- **Description**: 镜像仓库,一个轻量级、灵活的 2D 图形框架,基于 SDL3 构建,旨在利用现代 C++20 特性使游戏和应用开发快速且直观。
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://github.com/CatIsNotFound/MyEngine
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-07
- **Last Updated**: 2026-03-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 游戏开发, 界面开发, sdl3, 跨平台开发
## README
# MyEngine
  
MyEngine 是一个轻量级但功能强大的 2D 图形框架,构建于 SDL3 及其扩展之上。它以简洁和灵活为设计理念,提供直观的面向对象 API,使游戏和应用程序开发变得快速而愉悦。利用现代 C++20 特性,MyEngine 提供了模块化架构,允许开发人员以最少的样板代码轻松创建交互式图形应用程序。
## 版本日志更新
当前项目正在开发,具体更新内容,详见 [Changelog](ChangeLog_zh.md) 文件以了解最新版本特性。
## C/C++ 编译器支持
| GCC | Clang | MSVC | Apple Clang |
| ---- | ----- | --------------------- | ----------- |
| 12+ | 15+ | 19.37+ (VS2022 17.7+) | 16.0+ |
若了解如何安装 C/C++ 编译器,请参见 [编译器安装向导](https://github.com/CatIsNotFound/MyEngine/wiki/%E7%BC%96%E8%AF%91%E5%99%A8%E5%AE%89%E8%A3%85%E5%90%91%E5%AF%BC)
若已经安装 IDE,请参考 [IDE 配置指南](https://github.com/CatIsNotFound/MyEngine/wiki/IDE%20%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8D%97)。
## 环境依赖
使用此第三方库需要安装如下依赖,或者可直接通过 [Github Release](https://github.com/CatIsNotFound/MyEngine/releases/tag/requirements) 或 [Gitee Release](https://gitee.com/CatIsNotFound/MyEngine/releases/tag/requirements) 一次性安装依赖库:
- [SDL](https://github.com/libsdl-org/SDL)
- [SDL_image](https://github.com/libsdl-org/SDL_image)
- [SDL_ttf](https://github.com/libsdl-org/SDL_ttf)
- [SDL_mixer](https://github.com/libsdl-org/SDL_mixer)
可选依赖:(p.s: 但 MacOS 必需安装)
- [FMT](https://github.com/fmtlib/fmt.git)
- [HowardHinnant Date](https://github.com/HowardHinnant/date.git) (Windows 系统不建议安装)
## 快速开始
### 二进制版本获取
目前暂时未发布正式版本,预计今年 2~3 月份发布 v0.2.1 版本。
~~可通过 [Github Release]() 或 [Gitee Release]() 页面获取预编译版本。~~
### 源仓库安装
1. 使用 Git 克隆项目
```shell
git clone https://github.com/CatIsNotFound/MyEngine.git
```
或者使用如下目录克隆项目:
```shell
git clone https://gitee.com/CatIsNotFound/MyEngine.git
```
如果需要安装依赖库,请在克隆项目后执行如下命令:
```shell
cd MyEngine
git submodule update --init --remote
```
若只希望安装其中一两个依赖库(比如 `fmt` 库以及 `date` 库),请在终端下执行:
```shell
cd MyEngine
git submodule update --init --remote libs/fmt libs/date
```
2. 使用 CMake 配置项目
```shell
cd MyEngine
mkdir build ; cd build
cmake .. -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="/path/to/MyEngine" -DSDL3_LIB=/path/to/SDL3 -DSDL3_IMAGE_LIB=/path/to/SDL3_image -DSDL3_MIXER_LIB=/path/to/SDL3_mixer -DSDL3_TTF_LIB=/path/to/SDL3_ttf
```
> ❗ 注意:
>
> 需要替换 `CMAKE_INSTALL_PREFIX`, `SDL3_LIB`, `SDL3_IMAGE_LIB`, `SDL3_TTF_LIB`, `SDL3_MIXER_LIB` 的静态库路径。
3. 编译并安装项目
```shell
cmake --build . --config install
```
### 最小示例测试
1. 新建 `CMakeLists.txt` 文件,并写入如下内容:
```cmake
cmake_minimum_required(VERSION 3.24)
# TODO: 修改为你的项目名称
project(Demo)
set(CMAKE_CXX_STANDARD 20)
# TODO: 配置 CMake 前需要设定如下路径
set(SDL3_LIB "/path/to/SDL")
set(SDL3_IMAGE_LIB "/path/to/SDL3_image")
set(SDL3_TTF_LIB "/path/to/SDL3_ttf")
set(SDL3_MIXER_LIB "/path/to/SDL3_mixer")
# set(DATE_LIB "/path/to/date")
# set(FMT_LIB "/path/to/fmt")
set(MYENGINE_LIB "/path/to/MyEngine")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
list(APPEND CMAKE_PREFIX_PATH ${SDL3_LIB})
list(APPEND CMAKE_PREFIX_PATH ${SDL3_IMAGE_LIB})
list(APPEND CMAKE_PREFIX_PATH ${SDL3_TTF_LIB})
list(APPEND CMAKE_PREFIX_PATH ${SDL3_MIXER_LIB})
# list(APPEND CMAKE_PREFIX_PATH ${DATE_LIB})
# list(APPEND CMAKE_PREFIX_PATH ${FMT_LIB})
list(APPEND CMAKE_PREFIX_PATH ${MYENGINE_LIB})
find_package(SDL3 REQUIRED)
find_package(SDL3_image REQUIRED)
find_package(SDL3_ttf REQUIRED)
find_package(SDL3_mixer REQUIRED)
# find_package(date REQUIRED)
# find_package(fmt REQUIRED)
find_package(MyEngine REQUIRED)
add_executable(${PROJECT_NAME}
main.cpp
)
target_link_libraries(${PROJECT_NAME} PRIVATE
SDL3::SDL3
SDL3_image::SDL3_image
SDL3_ttf::SDL3_ttf
SDL3_mixer::SDL3_mixer
# date::date
# fmt::fmt
MyEngine::MyEngine
)
set_target_properties(${PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
)
# TODO: 如果项目需要资源,请移除如下注释
# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/assets ${CMAKE_BINARY_DIR}/bin/assets
# )
if (WIN32)
set(POST_BUILD_COMMANDS
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDL3_LIB}/bin ${CMAKE_BINARY_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDL3_MIXER_LIB}/bin ${CMAKE_BINARY_DIR}/bin
)
if (MINGW)
list(APPEND POST_BUILD_COMMANDS
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDL3_IMAGE_LIB}/x86_64-w64-mingw32/bin ${CMAKE_BINARY_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDL3_TTF_LIB}/x86_64-w64-mingw32/bin ${CMAKE_BINARY_DIR}/bin
)
else ()
list(APPEND POST_BUILD_COMMANDS
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDL3_IMAGE_LIB}/bin ${CMAKE_BINARY_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDL3_TTF_LIB}/bin ${CMAKE_BINARY_DIR}/bin
)
endif()
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
${POST_BUILD_COMMANDS}
)
endif()
```
2. 编辑 `main.cpp` 文件:
```cpp
#include
using namespace MyEngine;
int main() {
Engine engine;
auto win = new Window(&engine, "Hello world!");
win->installPaintEvent([](Renderer* r) {
r->fillBackground(StdColor::DarkBlue);
r->drawDebugText("Hello world!", {20, 20}, StdColor::White);
});
win->show();
return engine.exec();
}
```
3. 测试并运行整个项目,以命令行为例:
```shell
cd /path/to/YourProject
mkdir build ; cd build
cmake ..
cmake --build .
./YourProject
```
4. 此时会显示如下图所示的窗口,若能正常显示,说明成功了!

## 许可证
本项目采用 MIT 开源许可证,详见 [LICENSE](LICENSE) 文件。
## 获取帮助
1. 通过 [Wiki](https://github.com/CatIsNotFound/MyEngine/wikis) 进行查看文档说明。(内容未更新)
2. 通过 [Github Issue](https://github.com/CatIsNotFound/MyEngine/issues) 或 [Gitee Issues](https://gitee.com/CatIsNotFound/MyEngine) 提交遇到的问题