【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

相关推荐
她说可以呀11 小时前
Vue插槽
前端·javascript·vue.js
qq_4480111611 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan11 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_9583529012 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝12 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing0313 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel14 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放14 小时前
Python基础语法练习题(73)
java·前端·python
风骏时光牛马14 小时前
面向复杂场景的大模型应用落地与能力优化实践
前端
小小善后师14 小时前
我做了个病历归档小程序,被 AI 识别的"最后一公里"狠狠上了一课
前端