c++ - 我应该转向面向对象编程(黑匣子)吗?如何转向?

标签 c++ oop directx

现在我有一个带有几个类的 DirectX 引擎 - 应用程序、图形、声音,每个类大约有 1k 行,它们相互引用。我最初试图限制类和东西的使用,比如传递 D3D 设备而是让它成为所有类都可以使用的全局,但我在其他人的引擎中看到,所有东西都被分成许多类,它们有像 Engine->GetRenderer->Render(MyD3DContext); 这样的东西。这不是非常低效吗?为什么不直接将 MyD3DContext 设为全局并直接在 Render 函数中使用它。最后一件事我不明白的是 = 你应该如何制作独立于彼此工作的类?听起来很奇怪。

最佳答案

首先,为什么您认为这非常低效?除了更容易编码和维护之外,它的速度也非常快。 OOP 不是瓶颈,对于具有多个开发人员和多个关注点的大型项目(例如真实世界的游戏)来说,它是一个福音。

让我举个例子,既然你提到了“游戏”:

游戏是模拟游戏 模拟包含实体(Objects) 对象可以事情,并且属性。因此对象就像是属性和 Action 的封装。这就是“面向对象编程”中的“对象”。您可以认为它们(对象)是在模拟器中的虚构工厂中创建的。对象的蓝图是“类”,称为封装

这些对象中的每一个都可能通过某种高度数学化的《半条命 2》(源)级物理引擎绑定(bind)到您的世界。您不想为每个类(class)编写“物理”代码。相反,您将从类(或接口(interface))“IPhysics”继承。然后,每当您将重力从 10.0 更改为 15.0 时,该值就会在整个“世界”场景中传播。这就是继承

游戏中的每个对象,比如《半条命 2》,戈登弗里曼可以同时充当“玩家”和“可以编写脚本”,如果你明白我的意思的话。这就是多态。一个对象在不同类型中起作用。

所以您看,在 OOP 中建模和呈现虚构游戏非常容易(而且非常高效)。

关于c++ - 我应该转向面向对象编程(黑匣子)吗?如何转向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185483/

相关文章:

c++ - 访问冲突读取位置 0x00184000

c++ - 引用的生命周期是否延长?

c++ - 赋值开关大小写 c++

c++ - 使用 stringstream 将 int 解析为字符串

oop - 术语:在 OOP 中,当您有一个对象或记录使用查找表或网关中的 "joined"数据时,它被称为什么?

c# - 在锁定的系统上渲染 3D 场景

c++ - 如何正确释放 ID3D11ShaderResourceView** 以避免内存泄漏?

c++ - 使用 fstream 读取 ASCII 文件

c# - 如何通过配置静态方法来防止故障(内存泄漏)?

oop - 哪些是常见的 DDD(领域驱动设计)模式?