【V0.1B4】从零开始的2D游戏引擎开发之路

TEnGinE Version-0.1 Build-4 更新日志

发布日期 : 2022-04-29 23:48
更新类型: Bug修复与代码质量优化


概述

Build-4 是在 Build-3 基础上的维护性更新,主要聚焦于修复关键 Bug 和提升代码健壮性。本次更新解决了单例模式实现错误、随机数生成缺陷以及头文件管理问题,为引擎后续开发奠定了更坚实的基础。


详细变更

1. UniqueID 系统修复 (Tanxl_UniqueID.h)

问题修复:

问题类型 描述 修复方案
严重Bug GetIdGenerator() 返回局部变量引用 改为 static UniqueIdBase UNIBase; 静态局部变量
类型警告 srand(time(0)) 类型不匹配 改为 srand(static_cast<unsigned int>(time(0)))
逻辑错误 循环产生15位ID但索引从1开始 改为 for (int i = 0; i < 15; i++)
格式错误 ID开头会产生多余分隔符 "-" 添加条件 && i != 0
未定义行为 构造函数/析构函数无实现体 添加空实现 {}
赋值错误 赋值操作符未返回对象 改为 return *this;

修复前代码:

cpp

复制代码
static UniqueIdBase& GetIdGenerator()
{
    UniqueIdBase UNIBase;  // 局部变量,函数返回后失效
    return UNIBase;
}
srand(time(0));
for (int i = 1; i <= 15; i++)  // 索引从1开始 会导致生成的字符少一位
    if (i % 5 == 0) Data += "-";

修复后代码:

cpp

复制代码
static UniqueIdBase& GetIdGenerator()
{
    static UniqueIdBase UNIBase;  // 静态局部变量,生命周期正确
    return UNIBase;
}
srand(static_cast<unsigned int>(time(0)));
for (int i = 0; i < 15; i++)
    if (i % 5 == 0 && i != 0) Data += "-";  // 去掉开头分隔符

2. 头文件管理系统化改进

Utils.h - 添加包含保护

为所有外部库头文件添加 #ifndef/#define 保护,防止重复包含:

cpp

复制代码
#ifndef GL_GLEW_H
#define GL_GLEW_H
#include <GL\glew.h>
#endif

#ifndef GLFW_GLFW3_H
#define GLFW_GLFW3_H
#include <GLFW\glfw3.h>
#endif
// ... 其他头文件同理
Utils.cpp - 清理冗余包含

变更前 : 直接包含所有系统头文件(与 Utils.h 重复)
变更后 : 仅包含 Utils.h,依赖其传递包含

cpp

复制代码
// Build-3
#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <SOIL2\soil2.h>
// ... 多个重复包含
#include "Utils.h"

// Build-4
#include "Utils.h"

3. OpenGL 渲染模块改进 (Tanxl_OpenGL_Draw.h)

添加头文件包含保护

cpp

复制代码
#ifndef TANXL_INSERTACTION_H
#define TANXL_INSERTACTION_H
#include "Tanxl_InsertAction.h"
#endif
取消全局 using namespace std

变更 : 移除 using namespace std;,改为显式 std:: 前缀

cpp

复制代码
// Build-3
using namespace std;
string Tag = "State[" + to_string(i) + "]";
cout << "LEFT_PUSHED! ..." << endl;

// Build-4
std::string Tag = "State[" + std::to_string(i) + "]";
std::cout << "LEFT_PUSHED! ..." << std::endl;

优势:

  • 避免命名空间污染
  • 提高代码可读性和可维护性
  • 符合大型项目编码规范

4. 主程序调整 (main.cpp)

变更项 Build-3 Build-4
新增包含 - #include "Tanxl_UniqueID.h"
网格大小 5 × 5 3 × 3

技术债务清理

本次更新解决了以下技术债务:

  1. 单例模式正确性 - 修复了可能导致悬垂引用的严重问题
  2. 随机数生成器 - 确保每次调用 Generate() 产生不同随机种子
  3. 跨平台兼容性 - 类型转换更严格,提升可移植性
  4. 编译效率 - 减少头文件重复解析

文件变更清单

文件 变更说明
Tanxl_UniqueID.h 单例实现、随机数、ID格式
Utils.h 添加头文件包含保护
Utils.cpp 移除重复包含
Tanxl_OpenGL_Draw.h 添加保护、规范命名空间
main.cpp 添加头文件、调整参数

Wild_Chicken_Programing /// TANXL 2026/03/25

相关推荐
冬奇Lab16 分钟前
每日一个开源项目(第137篇):Penpot - 真正开源的设计协作工具,SVG 原生格式消灭设计-开发鸿沟
前端·开源·设计
nuIl34 分钟前
实现一个 Coding Agent(7):Skills
前端·agent·cursor
nuIl38 分钟前
实现一个 Coding Agent(8):会话持久化与多会话
前端·agent·cursor
jt君424262 小时前
React Native JSI 深入剖析 — 第 5 部分中文技术整理:用 HostObject 把 C++ 类暴露给 JavaScript
前端·react native
胡萝卜术2 小时前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
fluffyox2 小时前
Notion 的公式栏里,藏着一台虚拟机——逆向 + 用 600 行 JS 复刻它的编译器与栈式 VM
前端
kyriewen3 小时前
2026 年了,这 6 个 npm 包可以卸载了——浏览器原生 API 已经能替代
前端·javascript·npm
铁皮饭盒4 小时前
bun直接tsx,优雅!
javascript·后端
Csvn5 小时前
Monorepo 迁移血泪史:从 Multi-Repo 到 Turborepo,这 3 个坑我帮你踩完了
前端
星栈6 小时前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架