Lenheart 62b0f6dafd feat(渲染): 添加虚拟分辨率支持并重构相机系统
实现虚拟分辨率渲染系统,支持不同缩放模式
重构相机控制器以使用虚拟分辨率计算可见区域
移除硬编码的屏幕尺寸,改为动态获取
添加分辨率状态管理及相关工具函数
更新窗口和渲染器以处理分辨率变化
2026-04-06 23:17:26 +08:00
2026-03-28 04:42:54 +08:00

Frostbite2D

一个现代化的跨平台 2D 游戏引擎,使用 C++17 开发。

特性

  • 跨平台支持 - Windows、Linux、macOS、Nintendo Switch
  • 现代渲染 - OpenGL 4.x 渲染器,支持批量渲染和自定义着色器
  • 完整游戏框架 - 场景管理、Actor 系统、精灵动画
  • 资源管理系统 - NPK 图片归档、PVF 脚本归档、LRU 缓存
  • 音频系统 - SDL2_mixer支持 MP3/OGG/WAV
  • 输入系统 - 键盘、鼠标、触摸、手柄完整支持
  • 智能指针 - 自定义引用计数系统,避免内存泄漏
  • 事件系统 - 支持捕获/冒泡、优先级、事件拦截

构建

本项目使用 XMake 作为构建系统。

前置要求

  • C++17 兼容编译器
  • XMake
  • SDL2、SDL2_image、SDL2_mixer、GLM、Glad、zlib

基本构建

xmake build

调试构建

xmake build -m debug

发布构建

xmake build -m release

平台特定构建

xmake build -p windows
xmake build -p linux
xmake build -p switch

快速开始

#include <frostbite2D/core/application.h>
#include <frostbite2D/core/window.h>
#include <frostbite2D/2d/actor.h>
#include <frostbite2D/2d/sprite.h>
#include <frostbite2D/scene/scene.h>
#include <frostbite2D/scene/scene_manager.h>
#include <frostbite2D/resource/asset.h>
#include <frostbite2D/resource/npk_archive.h>

using namespace frostbite2D;

int main(int argc, char** argv) {
  AppConfig config = AppConfig::createDefault();
  config.windowConfig.width = 1280;
  config.windowConfig.height = 720;
  config.windowConfig.title = "My Game";

  Application& app = Application::get();
  if (!app.init(config)) {
    return -1;
  }

  Asset::get().setWorkingDirectory("assets");
  NpkArchive::get().open("images.npk");

  auto scene = MakePtr<Scene>();
  SceneManager::get().PushScene(scene);

  auto sprite = Sprite::createFromFile("player.png");
  if (sprite) {
    sprite->SetPosition(100, 100);
    scene->AddActor(sprite);
  }

  app.run();
  app.shutdown();

  return 0;
}

模块概览

模块 描述
core Application、Window 核心类
2d Actor、Sprite 2D 组件
graphics Renderer、Batch、Camera、Texture、Shader
scene Scene、SceneManager 场景管理
resource Asset、NpkArchive、PvfArchive 资源管理
audio AudioSystem、Music、Sound 音频系统
animation Animation、AnimationData 动画系统
event 事件系统(窗口、键盘、鼠标、触摸、手柄)
base RefObject、RefPtr 智能指针
types Vec2、Vec3、Rect、Color 数学类型

项目结构

Frostbite2D/
├── Frostbite2D/              # 引擎核心
│   ├── include/frostbite2D/ # 公共头文件
│   │   ├── 2d/              # 2D 图形组件
│   │   ├── animation/       # 动画系统
│   │   ├── audio/           # 音频系统
│   │   ├── base/            # 基础类型(智能指针)
│   │   ├── core/            # 核心引擎类
│   │   ├── event/           # 事件系统
│   │   ├── graphics/        # 图形渲染系统
│   │   ├── resource/        # 资源管理系统
│   │   ├── scene/           # 场景管理
│   │   ├── types/           # 类型定义
│   │   └── utils/           # 工具类
│   └── src/                 # 实现文件
├── Game/                     # 游戏示例
│   ├── assets/               # 游戏资源
│   └── src/                  # 游戏源文件
├── platform/                 # 平台配置
└── xmake.lua                 # 构建配置

技术亮点

  • 批量渲染 - 2048 四边形批次优化
  • LRU 缓存 - NPK/SoundPack 资源缓存(默认 512MB
  • 侵入式链表 - 高性能 Actor 子对象管理
  • 变换系统 - 局部/世界变换矩阵自动更新
  • 事件系统 - 支持捕获/冒泡、优先级、拦截
  • 资源归档 - 支持 NPK图片/音频、PVF脚本

许可证

MIT License

Description
No description provided
Readme 54 MiB
Languages
C 50.2%
C++ 49.4%
Lua 0.4%