Skip to content

IICSC/engine

Repository files navigation

Engine2D

一个现代化的、高性能的2D游戏引擎,使用C++17开发,采用组件式架构设计。

🚀 特性

  • 现代化C++: 使用C++17标准,支持智能指针、移动语义等现代特性
  • 组件式架构: 游戏对象由多个组件组成,每个组件负责特定功能
  • 高性能: 优化的渲染和物理系统,支持高效的游戏开发
  • 完整的工具链: 包含日志系统、性能分析器、配置管理等工具
  • 跨平台: 支持Windows、Linux、macOS
  • 易于使用: 提供简单直观的API,降低游戏开发的学习曲线
  • 模块化设计: 各系统相对独立,可以根据需要选择使用哪些功能

🎯 核心功能

  • 场景管理: 灵活的场景和游戏对象管理系统
  • 图形渲染: 基于SDL2的高性能2D图形渲染
  • 物理系统: 完整的物理模拟,包括刚体动力学和碰撞检测
  • 输入处理: 键盘、鼠标和触摸输入处理
  • 音频系统: 音效和音乐支持
  • 资源管理: 高效的资源加载和管理
  • 日志系统: 完整的日志记录和调试支持
  • 性能分析: 内置性能分析工具
  • 配置管理: 灵活的配置系统

📋 系统要求

  • 编译器: C++17兼容的编译器 (GCC 7+, Clang 5+, MSVC 2017+)
  • 构建系统: CMake 3.12+
  • 依赖库: SDL2 及相关库 (SDL2_image, SDL2_ttf, SDL2_mixer)
  • 内存: 至少 512MB RAM
  • 存储: 至少 100MB 可用空间

🔨 构建说明

Windows (Visual Studio)

  1. 安装必要的依赖:

  2. 配置SDL2环境变量或在CMake配置中指定SDL2路径

  3. 创建构建目录并生成项目文件:

    mkdir build
    cd build
    cmake ..
    
  4. 打开生成的Visual Studio解决方案并构建项目

Linux

  1. 安装必要的依赖:

    sudo apt-get install cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev
    
  2. 创建构建目录并构建项目:

    mkdir build
    cd build
    cmake ..
    make
    

macOS

  1. 安装必要的依赖:

    brew install cmake sdl2 sdl2_image sdl2_ttf sdl2_mixer
    
  2. 创建构建目录并构建项目:

    mkdir build
    cd build
    cmake ..
    make
    

💡 使用示例

Engine2D 的渲染以几何图元 + 内置位图字体为核心,开箱即用、无需任何外部 图片/字体/音频文件。下面是一个可直接运行的最小示例:

#include <Engine2D/Engine2D.h>
using namespace Engine2D;

class Hello : public Component {
public:
    void initialize() override { m_input = Engine::getInstance().getInputManager(); }
    void update(float dt) override {
        m_t += dt;
        if (m_input->isKeyPressed(SDLK_ESCAPE)) Engine::getInstance().setRunning(false);
    }
    void render() override {
        auto* r = Engine::getInstance().getRenderer();
        r->drawCircle(400, 300, 40 + 10 * std::sin(m_t * 3), Color(120, 220, 255), true);
        r->drawTextCentered("HELLO ENGINE2D", 400, 120, Color::WHITE, 4);
    }
private:
    InputManager* m_input = nullptr; float m_t = 0;
};

int main() {
    Engine& e = Engine::getInstance();
    if (!e.initialize("My Game", 800, 600)) return 1;
    e.getSceneManager()->createScene("Main");
    e.getSceneManager()->loadScene("Main");
    e.getSceneManager()->getCurrentScene()->createGameObject("Hi")->addComponent<Hello>();
    e.run();
    return 0;
}

内置文字 & 程序化音频(无需任何资源文件)

// 文字(屏幕坐标,左上角原点)
renderer->drawText("SCORE 1200", 16, 16, Color::WHITE, 3);
renderer->drawTextCentered("GAME OVER", 400, 280, Color::RED, 6);

// 音效:用 SDL 核心音频实时合成,支持 正弦/方波/三角/锯齿/噪声
audio->playTone(880.0f, 80, 0.5f, Waveform::SQUARE);          // 单音
audio->playSweep(440.0f, 880.0f, 200, 0.5f, Waveform::SINE);  // 滑音

📦 示例与教程

仓库内置一套渐进式学习教程和两个完整游戏,构建后位于 build/bin/

学习教程(Examples/Learn/,详见 LEARNING.md):

主题
Learn01_HelloWindow 程序骨架与主循环
Learn02_DrawingShapes 图元绘制
Learn03_Input 键盘 / 鼠标输入
Learn04_Physics 刚体、重力与反弹
Learn05_Animation 缓动与帧无关动画
Learn06_TextAndUI 位图字体与按钮
Learn07_AudioAndScenes 程序化音效与场景切换

完整游戏(Examples/):

  • SnakeGame —— 贪吃蛇,含菜单/暂停/计分/最高分/结算/音效,结构清晰,推荐首读。
  • TankBattle —— 坦克大战,多波敌人 + AI + 可破坏砖墙 + 完整流程。
  • BounceArena / FallingBlocks —— 演示引擎物理(碰撞、重力)。
  • InputTest / SimpleGame —— 输入与最简范例。

🧪 测试

项目包含完整的单元测试套件:

# 启用测试构建
cmake -DBUILD_TESTS=ON ..

# 运行测试
make test

📊 性能

引擎经过优化,支持:

  • 60+ FPS 稳定运行
  • 1000+ 游戏对象同时渲染
  • 高效的物理模拟
  • 内存使用优化

🤝 贡献

欢迎贡献代码!请遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

本项目采用MIT许可证。详情请参见LICENSE文件。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages