Lenheart 6cd1b42fef feat(地图系统): 实现角色移动约束和地图切换功能
添加地图移动区域检测和角色移动约束逻辑
引入地图切换请求队列机制,支持延迟处理角色传送
在CharacterObject中实现地图边界检测和位置约束应用
2026-04-05 12:04:07 +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%