【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 文件。

文件结构变化

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

相关推荐
xcLeigh1 天前
Unity基础:Instantiate实例化——在运行时动态创建游戏物体
游戏·unity·游戏引擎·教程·instantiate
辻弋2017 天前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
淡海水11 天前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
淡海水12 天前
02-03-原理篇-大对象堆
unity·c#·游戏引擎·.net·gc
郝学胜-神的一滴12 天前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
淡海水13 天前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
babywang014 天前
Unity笔记--AssetBundle详解
unity·游戏引擎
魔士于安14 天前
经典Game
游戏·游戏引擎·贴图·技术美术·模型
淡海水14 天前
01-04-认知篇-Unity内存全景
unity·c#·游戏引擎·.net·gc
598866753@qq.com14 天前
Codex与Unity
unity·游戏引擎