实现独立库的各种单文件跨平台 C/C++ 头文件。
图书馆 | 描述 | 最新版本 | 语言 |
---|---|---|---|
可爱_c2 | 基元、布尔结果和/或流形生成、形状投射/扫描测试、光线投射的 2D 碰撞检测例程 | 1.10 | C/C++ |
可爱网 | 适用于需要基于 UDP 的可选可靠性层以及内置安全方案的游戏的网络库 | 1.03 | C/C++ |
可爱的平铺 | 非常高效的加载器,用于导出为 JSON 格式的平铺地图 | 1.07 | C/C++ |
可爱的精灵 | 将 .ase/.aseprite 文件解析为紧凑且方便的结构集合 | 1.04 | C/C++ |
可爱的声音 | 单声道/立体声加载/播放/循环(带插件)/平移 WAV + OGG(OGG 的 stb_vorbis 包装器)、高性能自定义混音器、音乐 + 交叉淡入淡出支持 | 2.08 | C/C++ |
可爱的数学 | 通过 SSE 内在函数进行专业级 3D 向量数学 | 1.02 | C++ |
可爱_png | 加载/保存 PNG、纹理图集编译器、DEFLATE 兼容解压缩器 | 1.05 | C/C++ |
可爱的精灵批次 | 运行时 2d 精灵批处理程序。在内存中动态构建地图集。可用于实现任何目的(如 2D 游戏)的精灵批处理程序以实现高性能渲染,而无需在磁盘上预编译纹理图集。 | 1.06 | C/C++ |
可爱同步 | 实用同步原语集合,包括读/写锁和线程池/任务系统 | 1.01 | C/C++ |
可爱的_tls | 通过 TCP 创建与网站的 TLS 连接,这对于 HTTPS 请求很有用。 | 1.01 | C/C++/Obj-C |
通常,这些标头没有依赖性,并且旨在直接包含在源代码中(检查每个标头以获取文件顶部的特定文档)。每个标头都有一个 LIBNAME_IMPLMENTATION 符号;将其添加到代码中的单个翻译单元中,并在其后包含标题以定义库符号。否则只需像平常一样包含标题即可。
有些标题还包含示例代码或演示。在此存储库中,只需查找相应的示例或测试文件夹。示例文件夹对于了解如何使用特定标头特别有用。
这是cute_headers 的discord 聊天的链接。请随意介入并提出问题、提出建议或进行讨论。如果有人使用过cute_headers,很高兴听到您的体验! https://discord.gg/2DFHRmX
另一种联系我的简单方法是通过 Twitter @randypgaul。
- 制作单个文件有什么意义?为什么标头中有实现和静态函数?
包含这些标头就像包含普通标头一样。然而,为了定义实现,每个标头看起来像这样:
// Do this ONCE in a .c/.cpp file
#define LIBNAME_IMPLEMENTATION
#include "libname.h"
// Everywhere else, just include like a typical header
#include "libname.h"
这会将文件一次性变成 header + c 文件组合。这样做的要点是:A)处理标头或将其发送给人们很容易,没有 zip 文件或任何内容,只需复制并粘贴单个文件; B) 构建脚本很麻烦,这些单文件库可以集成到任何项目中,而无需修改单个构建脚本。
- 将所有代码写在头文件中不会破坏编译时间吗?
标头实现编译时间慢的耻辱来自内联代码和模板垃圾邮件。在任何一种情况下,每个翻译单元都必须遍历标头并放置函数的内联版本,或者为模板生成各种特定于类型的函数。一旦链接器启动并需要将翻译单元合并在一起,删除重复的符号,情况就会变得更糟。通常链接器是单线程任务,并且确实会成为构建时间的瓶颈。
一个构造良好的单文件头不会使用任何模板,并且很少使用内联。另外,构造良好的单文件头使用 #define 将实现(函数定义和符号)放入单个翻译单元中。通过这种方式,就构建时间而言,精心设计的单文件头几乎是 C 编译器能遇到的最好的东西。特别是当标头可以选择#define 掉不需要的功能时。
- 这些仅包含头文件的库不是一种新时尚吗?
我个人真的不知道这是否是一种时尚,但这些文件实际上不仅仅是标题。它们是标头,末尾附有 .C 文件部分(实现)。它是两个不同的文件与 C 预处理器粘在一起,但除非用户执行#define LIB_IMPLMENTATION,否则实现部分永远不会显示。此定义步骤是使用这些标头所需的唯一集成步骤。
不幸的是,编写一个好的标头库非常困难,因此任何随意的标头库可能都不是一个好的标头库。 STB 和 RJM 是非常好的标头库,并且是了解良好的标头库是什么样子的很好的参考。马蒂亚斯·古斯塔夫森 (Mattias Gustavsson) 有我最喜欢的标题集。
- 许可证是什么?
每个库在文件末尾都包含许可证信息。可以在公共域和 zlib 之间进行选择。
- 我正在寻找以前见过的标题,但它丢失了。它去哪儿了?
一些不受欢迎或不太有用的标头已被弃用,现在仍然存在于此。
- *你们有更高级别的库吗?这些似乎有点太低级了。
可爱的标题确实相当低级。他们解决具体问题。如果您正在寻找更高级别的游戏创建框架,我建议尝试 Cute Framework,这是一个 2D 游戏创建框架,主要构建在此处看到的各种低级别可爱标头之上。