【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

相关推荐
意法半导体STM323 小时前
【官方原创】STM32CubeProgrammer与STM32 Bootloader连接全流程实战指南 LAT1631
开发语言·前端·javascript·stm32·单片机·嵌入式硬件
薛定谔的悦3 小时前
《储能系统中的故障定位》
java·服务器·前端
慧一居士3 小时前
Vue项目中使用的首选的依赖库如VueUse等,使用场景和使用示例介绍
前端·vue.js
Irene19913 小时前
getter 和 方法的区别(数据属性和访问器属性,Vue 3 中,computed 和 getter 的关系和区别)
javascript·vue.js·computed·getter
带娃的IT创业者3 小时前
WeClaw-TTS 语音合成实战:pyttsx3 本地引擎与 Edge-TTS 云服务的混合架构.md
前端·tts·ai智能体·openclaw·weclaw
gCode Teacher 格码致知3 小时前
Javascript提高:Promise、Fetch、Axios、XHR、jQuery AJAX 完整对比-由Deepseek产生
javascript·ajax·jquery
鹏程十八少3 小时前
5.Android 如何用腾讯Shadow在双11电商场景的完整复盘(实战2年),实现热修复(全网最详细实战案例)
android·前端·面试
wl85113 小时前
SAP HCM 公积金超过上限后的计税方案
前端·html
二月夜3 小时前
Vue项目打包为WAR文件部署Tomcat完整指南
前端·vue.js·tomcat