【V0.1B7】从零开始的2D游戏引擎开发之路
TEnGinE Version-0.1 Build-7 更新日志内部版本号v0.00.00.10新增文件数2 个修改文件数5 个变更概要类别内容新增文件Tanxl_InitBase.h、Tanxl_InsertAction.cpp输入模块头文件与实现分离补充构造函数游戏对象加入组件基类ComponmentBase着色器清理废弃注释添加版本标记主程序测试网格从 3×3 扩大到 10×10一、输入处理模块拆分头实现分离Build-6 中Tanxl_InsertAction.h将类的声明和实现全部写在了一起。Build-7 把实现部分抽离到独立的.cpp文件。文件结构变化codeBuild-6: Tanxl_InsertAction.h 声明 实现 全部在内 Build-7: Tanxl_InsertAction.h 仅声明 Tanxl_InsertAction.cpp 实现Tanxl_InsertAction.h 改动点Key_Unit 结构体cpp// Build-6 — 内联默认值 struct Key_Unit { int GLFW_KEY{ NULL }; bool MoveToX{ false }; bool MoveToY{ false }; float MoveLen{ 0.0f }; }; // Build-7 — 改为显式构造函数 struct Key_Unit { Key_Unit(); Key_Unit(int GLKEY, bool MOVX, bool MOVY, float MOVL); int GLFW_KEY; bool MoveToX; bool MoveToY; float MoveLen; };InsertEventBase 类将原来内联在类声明中的构造/析构/拷贝控制函数改为仅在头文件中声明cpp// Build-6 内联定义方式 InsertEventBase() {}; ~InsertEventBase() {}; InsertEventBase(const InsertEventBase) {}; // Build-7 仅声明 InsertEventBase(); ~InsertEventBase(); InsertEventBase(const InsertEventBase);Tanxl_InsertAction.cpp 新增内容完整实现了以下内容cpp// Key_Unit 构造函数 Key_Unit::Key_Unit() : GLFW_KEY(NULL), MoveToX(false), MoveToY(false), MoveLen(0.0f) {} Key_Unit::Key_Unit(int GLKEY, bool MOVX, bool MOVY, float MOVL) : GLFW_KEY(GLKEY), MoveToX(MOVX), MoveToY(MOVY), MoveLen(MOVL) {} // 单例获取 InsertEventBase InsertEventBase::GetInsertBase() { InsertEventBase* IEB new InsertEventBase; return *IEB; } // 注册按键事件 void InsertEventBase::RegistEvent(Key_Unit KU) { KeyEventS.push_back(KU); } // 帧循环中检测输入 void InsertEventBase::GetInsert(GLFWwindow* window, float* MoveX, float* MoveY) { for (int i 0; i KeyEventS.size(); i) { if (glfwGetKey(window, KeyEventS.at(i).GLFW_KEY) GLFW_PRESS) { if (KeyEventS.at(i).MoveToX) *MoveX KeyEventS.at(i).MoveLen; if (KeyEventS.at(i).MoveToY) *MoveY KeyEventS.at(i).MoveLen; std::cout BUTTON PUSHED x_ *MoveX y_ *MoveY std::endl; } } }GetInsert()相比 Build-6 多了一行坐标输出日志方便调试时观察按键响应。二、游戏对象加入组件基类Tanxl_GameObject.h从空类扩展为带组件容器的基础类cpp// Build-6 class GameObjectBase { }; // Build-7 class ComponmentBase { virtual void SpecialAbility() 0; // 纯虚函数接口 }; class GameObjectBase { private: std::vectorComponmentBase* CMB; // 组件列表 };目前ComponmentBase只定义了一个纯虚函数SpecialAbility()作为占位。后续可以在此基础上扩展渲染组件、物理碰撞组件等具体实现。三、新增初始化模块新增文件Tanxl_InitBase.h当前为空壳cpp//_VERSION_0_1_ UPDATE LOG // LAST_UPDATE 2022-05-04 21:19 // 基础版本该模块用于对所有基类进行初始化。目前仅创建文件尚未写入实际内容。四、顶点着色器清理StatevertShader.glsl两处改动项目Build-6Build-7文件头部无版本信息添加_VERSION_0_1注释头废弃注释第21-26行有旧单网格测试代码该段注释下移至第56-67行着色器的实际渲染逻辑没有变化只是调整了注释的位置和添加了版本标记。五、主程序测试参数调整cpp// Build-6 GSB-SetState(3, 3); // Build-7 GSB-SetState(10, 10);测试网格从 3×3 扩大到 10×10用于验证更大规模下的网格渲染表现。Wild_Chicken_Programing///2022-05-04 22:10