【V0.1B7】从零开始的2D游戏引擎开发之路

TEnGinE Version-0.1 Build-7 更新日志


内部版本号 :v0.00.00.10
新增文件数 :2 个
修改文件数:5 个


变更概要

类别 内容
新增文件 Tanxl_InitBase.hTanxl_InsertAction.cpp
输入模块 头文件与实现分离,补充构造函数
游戏对象 加入组件基类 ComponmentBase
着色器 清理废弃注释,添加版本标记
主程序 测试网格从 3×3 扩大到 10×10

一、输入处理模块拆分(头实现分离)

Build-6 中 Tanxl_InsertAction.h 将类的声明和实现全部写在了一起。Build-7 把实现部分抽离到独立的 .cpp 文件。

文件结构变化

code

复制代码
Build-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::vector<ComponmentBase*> CMB;      // 组件列表
};

目前 ComponmentBase 只定义了一个纯虚函数 SpecialAbility() 作为占位。后续可以在此基础上扩展渲染组件、物理碰撞组件等具体实现。


三、新增初始化模块

新增文件 Tanxl_InitBase.h,当前为空壳:

cpp

复制代码
//_VERSION_0_1_ UPDATE LOG
// LAST_UPDATE 2022-05-04 21:19
// 基础版本

该模块用于对所有基类进行初始化。目前仅创建文件,尚未写入实际内容。


四、顶点着色器清理

StatevertShader.glsl 两处改动:

项目 Build-6 Build-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

相关推荐
我寄人间雪满头丶1 小时前
Unity中对于数值游戏的大数显示
游戏·unity·游戏引擎
游乐码2 小时前
unity基础 (三)坐标系
unity·游戏引擎
qq_205279052 小时前
Unity 避免Text组件每行开头不是字符和空格,适配不同分辨率
unity·游戏引擎
游乐码2 小时前
Unity基础(二)游戏中的角度及三角函数
游戏·unity·游戏引擎
真鬼1234 小时前
Cesium、Cmake、Dotnet快捷下载
unity·游戏引擎
游乐码1 天前
Unity坦克案例疑难记录(二)
unity·游戏引擎
小白学鸿蒙1 天前
Funplay Unity MCP 接入 trae 实战
unity·游戏引擎·mcp
相信神话20211 天前
3.5《酒魂》体验与失败设计
游戏引擎·godot·godot4
游乐码1 天前
Unity基础(一)游戏中的数学Mathf函数
游戏·unity·游戏引擎
地狱为王2 天前
Unity实现猫脸关键点检测
unity·游戏引擎·猫脸关键点检测