ac4d2ffc9a37c4983d7dea04ca78a0311a22e8ae
为SquirrelVM添加run()方法用于执行脚本中的main函数 重构main.nut脚本结构,将打印和错误调用封装到main函数中 在Application启动时自动执行脚本的main函数
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
Languages
C
50.2%
C++
49.4%
Lua
0.4%