TEnGinE Version-0.1 Build-10 更新日志
发布日期: 2022-05-11 00:20
内部版本号: Version-0.1 Build-10
变更概要表
| 类别 | 内容 |
|---|---|
| 核心功能 | DataBase模块加入内存申请成功与否的判断机制 |
| 功能新增 | GameState模块新增2D棋盘物品位置微调功能(SetExacHeight/SetExacWidth) |
| 代码清理 | 绘制模块移除早期遗留变量(StatePos、movespeed),numVAOs改为const |
| 接口精简 | Utils模块移除3个现阶段无用的ShaderProgram重载函数 |
| 文件清理 | 删除空文件Tanxl_StateControl.h |
一、DataBase模块内存安全增强(核心改进)
在 AppendItem() 和 Get_LocalData() 两处涉及 new 内存申请的位置增加了NULL指针检查。
Tanxl_DataBase.cpp - AppendItem() 函数:
cpp
else
{
Data_Vector* DTemp = new Data_Vector(
Item_Instance.Status_3, Item_Instance.Oth1,
Item_Instance.Status_4, Item_Instance.Oth2,
Item_Instance.Status_5, Item_Instance.Oth3);
Id_Vector* ITemp = new Id_Vector(
Item_Instance.Status_1, Item_Instance.Status_2,
Item_Instance.Code, Item_Instance.Name);
if (DTemp && ITemp)// ← 新增:判断是否申请空间成功
Append_Chain(*DTemp, *ITemp);
else
throw "添加失败! 申请内存空间失败"; // ← 新增
}
Tanxl_DataBase.cpp - Get_LocalData() 函数:
cpp
else if (Tag == "/TDB")
{
Data_Vector* Data_Temp = new Data_Vector(IData[0], SData[0], IData[1], SData[1], IData[2], SData[2]);
Id_Vector* Id_Temp = new Id_Vector(Type_Stat, Exac_Stat, Type_Data, Exac_Data);
IData[0] = 0; IData[1] = 0; IData[2] = 0; SData[0] = ""; SData[1] = ""; SData[2] = "";
if (Data_Temp && Id_Temp) // ← 新增:判断是否申请空间成功
Append_Chain(*Data_Temp, *Id_Temp);
else
throw "添加失败! 申请内存空间失败"; // ← 新增
continue;
}
二、GameState模块2D棋盘位置微调功能(新功能)
为 GameStateBase 类新增三个公开方法及一个私有成员变量,用于对2D棋盘上的物品进行精确位置微调。
Tanxl_GameState.h - 新增声明:
cpp
void SetAdjust(float Adjust); // ← 新增:设置微调幅度
size_t GetStateSize();
StateUnit* GetStateUnit(int Pos);
static GameStateBase& GetStateBase(int Height = 0, int Width = 0);
void SetExacHeight(float& Current); // ← 新增:微调高度位置
void SetExacWidth(float& Current); // ← 新增:微调宽度位置
int GetStateHeight()const;
int GetStateWidth()const;
private:
// ...
int GameState_Width;
int GameState_Height;
float GameState_Adjust; // ← 新增:微调幅度存储
std::vector<StateUnit*>GameState;
Tanxl_GameState.cpp - 新增实现:
cpp
void GameStateBase::SetAdjust(float Adjust) // ← 新增
{
this->GameState_Adjust = Adjust;
}
// ... 中间省略无变化代码 ...
void GameStateBase::SetExacHeight(float& Current) // ← 新增
{
static int EHCount = 0;
int LevelCount = 0;
float SingleBlock = 2.0f / GameState_Height;
while (SingleBlock < Current)
{
SingleBlock += 2.0f / GameState_Height;
LevelCount++;
}
if (SingleBlock - Current > Current - (SingleBlock - 2.0f / GameState_Height))
{
EHCount++;
if (EHCount == 10)
Current -= GameState_Adjust;
}
else
{
EHCount++;
if (EHCount == 10)
Current += GameState_Adjust;
}
}
void GameStateBase::SetExacWidth(float& Current) // ← 新增
{
static int EWCount = 0;
int LevelCount = 0;
float SingleBlock = 2.0f / GameState_Width;
while (SingleBlock < Current)
{
SingleBlock += 2.0f / GameState_Width;
LevelCount++;
}
if (SingleBlock - Current > Current - (SingleBlock - 2.0f / GameState_Width))
{
EWCount++;
if (EWCount == 10)
Current -= GameState_Adjust;
}
else
{
EWCount++;
if (EWCount == 10)
Current += GameState_Adjust;
}
}
构造函数与拷贝构造更新:
cpp
GameStateBase::GameStateBase(int Height, int Width) :
GameState_Width(Height), GameState_Height(Width), GameState(NULL),GameState_Adjust(0.0f) {} // ← 修改:初始化列表新增GameState_Adjust
// ...
GameStateBase::GameStateBase(const GameStateBase&) :GameState_Width(0), GameState_Height(0),GameState_Adjust(0) {} // ← 修改
三、绘制模块遗留代码清理(代码优化)
Tanxl_OpenGL_Draw.h 变更:
cpp
const int numVAOs = 1; // ← 修改:从宏定义改为const常量
GLuint PosA, PosB;
GLuint PosX, PosY;
GLuint Height, Width;
// GLuint StatePos; // ← 删除:未使用的全局变量
GLint StateInfor[100];
bool Clear_Function = false;
float movex;
float movey;
// float movespeed = 0.01f; // ← 删除:未使用的速度变量
GLuint renderingProgram;
GLuint vao[numVAOs];
四、Utils模块接口精简(代码瘦身)
移除3个当前项目未使用的高级ShaderProgram创建重载函数。
Utils.h - 移除声明:
cpp
public:
static bool checkOpenGLError();
static GLuint createShaderProgram(const char *vp, const char *fp);
// ↓ 以下3个重载已删除 ↓
// static GLuint createShaderProgram(const char *vp, const char *gp, const char *fp);
// static GLuint createShaderProgram(const char *vp, const char *tCS, const char* tES, const char *fp);
// static GLuint createShaderProgram(const char *vp, const char *tCS, const char* tES, char *gp, const char *fp);
};
Utils.cpp - 移除实现:
cpp
GLuint Utils::createShaderProgram(const char *vp, const char *fp) {
GLuint vShader = prepareShader(GL_VERTEX_SHADER, vp);
GLuint fShader = prepareShader(GL_FRAGMENT_SHADER, fp);
GLuint vfprogram = glCreateProgram();
glAttachShader(vfprogram, vShader);
glAttachShader(vfprogram, fShader);
finalizeShaderProgram(vfprogram);
return vfprogram;
}
// ↑ 此处删除了原Build-9中第100-140行的3个重载函数实现
五、文件清理(工程整理)
删除文件: Tanxl_StateControl.h
该文件内容仅为空的 #pragma once 预编译指令,属于早期占位文件,现已确认无用并移除。
影响范围总览表
| 文件 | 旧版行数 | 新版行数 | 变更类型 |
|---|---|---|---|
| Tanxl_DataBase.h | 152 | 153 | 修改(注释更新) |
| Tanxl_DataBase.cpp | 610 | 616 | 修改(新增内存判断逻辑×2) |
| Tanxl_GameState.h | 71 | 76 | 修改(新增3方法+1成员变量声明) |
| Tanxl_GameState.cpp | 116 | 170 | 修改(新增54行实现代码+构造函数更新) |
| Tanxl_OpenGL_Draw.h | 163 | 160 | 修改(删除2变量+1宏改const) |
| Utils.h | 74 | 70 | 修改(删除3个方法声明) |
| Utils.cpp | 140 | 98 | 修改(删除42行实现代码) |
| Tanxl_StateControl.h | 1 | - | 删除(空文件移除) |
净代码量变化: +19行(主要为GameState新功能实现),-45行(Utils精简+变量清理)
技术要点总结
架构层次图
code
┌─────────────────────────────────────────────────────────┐
│ TEnGinE V0.1 B10 │
├──────────────┬──────────────┬───────────────────────────┤
│ DataBase │ GameState │ Rendering │
│ ┌────────┐ │ ┌────────┐ │ ┌────────────────────┐ │
│ │内存安全 │ │ │位置微调 │ │ │ const常量化 │ │
│ │判断机制 │ │ │功能 │ │ │ 遗留变量清除 │ │
│ └────────┘ │ └────────┘ │ └────────────────────┘ │
├──────────────┴──────────────┴───────────────────────────┤
│ Utils Module │
│ ┌─────────────────────────┐ │
│ │ 精简为基础VP+FP渲染管线 │ │
│ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
核心 API 说明
| API/配置项 | 所属模块 | 说明 |
|---|---|---|
AppendItem() 内存判断 |
DataBase | new操作后增加NULL检查,失败时抛出异常 |
Get_LocalData() 内存判断 |
DataBase | 文件读取时链表节点创建增加安全校验 |
SetAdjust(float) |
GameState | 设置2D棋盘位置微调幅度(单位:OpenGL坐标) |
SetExacHeight(float&) |
GameState | 对Y轴坐标进行周期性微调(每10次调用触发) |
SetExacWidth(float&) |
GameState | 对X轴坐标进行周期性微调(每10次调用触发) |
numVAOs → const |
OpenGL_Draw | 从预处理器宏改为类型安全的const常量 |
位置微调算法:
计算单格尺寸 → 定位所在格子 → 判断距离边界远近 →
每10帧累加一次偏移量(方向由距离决定)
本次更新以代码健壮性提升为主线(内存安全判断),辅以功能性扩展(2D位置微调)和工程整洁度改善(接口精简、遗留代码清理)。
Wild_Chicken_Programing /// 2022-05-11 00:20