现在我有一个带有几个类的 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/