【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

相关推荐
Sparkle Star4 小时前
Unity VRTK4+SteamVR传送组件使用和层级关系
unity·游戏引擎
伽蓝_游戏4 小时前
UGUI源码剖析 (24):常用插件扩展介绍
ui·unity·c#·游戏引擎·游戏程序
空中海15 小时前
第二篇:Unity中级阶段(核心开发能力)
unity·游戏引擎
DaLiangChen21 小时前
Unity 实用工具:动态绘制物体边界包围盒(支持屏幕固定线宽)
unity·游戏引擎
张老师带你学21 小时前
Unity 食物 农产品相关
科技·游戏·unity·游戏引擎·模型
mxwin21 小时前
Unity Custom Interpolators与半透明阴影的原理与实战
unity·游戏引擎·shader
晴夏。1 天前
UE5第三人称模板实现及相关引擎源码分析
unity·ue5·游戏引擎·ue
HAPPY酷1 天前
解决 Unreal Engine 编译报错 MSB4018:三个核心排查方向
游戏引擎·虚幻
晴夏。1 天前
UE原生MovementBase实现分析
游戏引擎·ue·3c