【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

相关推荐
Listen·Rain4 小时前
Vue3:setup详解
前端·javascript·vue.js
Patrick_Wilson4 小时前
修好 bug 只是开始:一次由监控需求反向重构日志结构的复盘
前端·监控·数据可视化
kyriewen5 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
小粉粉hhh5 小时前
React(二)——dom、组件间通信、useEffect
前端·javascript·react.js
Csvn5 小时前
🤖 AI 生成前端代码的 5 个典型翻车现场及修复指南
前端
IT_陈寒6 小时前
SpringBoot自动装配坑了我一天,原来问题出在这
前端·人工智能·后端
索西引擎7 小时前
【React】key 属性:协调算法中的元素标识机制与最佳实践
前端·javascript·react.js
只会cv的前端攻城狮8 小时前
动态组件架构设计:从配置到事件驱动全链路解析
前端·vue.js
飞天狗8 小时前
Next.js 16 App Router 实战:服务端组件与流式渲染
前端·next.js
OpenTiny社区8 小时前
TinyEngine 2.11版本发布:AI 进一步融入画布,Vue 工程可一键转DSL
前端·vue.js·github