2012-11-01 34 views
0

现在我有几个类支持DirectX引擎 - 应用,图形,声音和他们每个人是1K左右的线条和他们每个参考eachother.I最初试图限制使用类和类似的东西传递D3D设备和而是让所有类都使用它,但是我在其他人的引擎中看到,一切都分成许多类,并且它们具有诸如Engine-> GetRenderer-> Render(MyD3DContext);是不是terriby低效?为什么不只是让MyD3DContext全球,直接在渲染function.And最后一件事我没有得到使用它是=怎么是你应该做的工作独立海誓山盟的课吗?听起来不可思议。我应该转向面向对象的编程(黑盒子)吗?

+2

如果您的图形与您的应用程序捆绑在一起,那么当您要更改图形时,您会做什么?你不应该因为你的图形已经改变而改变你的应用程序! – corsiKa

回答

1

它不是非常低效的。而且你肯定需要介绍某种OOP。甚至可能是something online

0

是的。

随着项目变得越来越大,有一个全球性的东西会引起大量的问题。遍历几个指针也不是特别低效。担心在正确的领域提高效率,您通过运行测试证明的领域效率低下,并始终尝试并保持代码的清晰度和分离度。

如果您担心效率低下,为什么不把测试应用程序合并在一起,而测试应用程序恰好具有这种类型的结构和时间,需要多长时间才能完成所有解除引用。你会发现它并不重要,比如建立一个多边形列表。

只有当您的项目发展壮大,您才能看到将非常全面封装的非全局对象的好处。

0

有几个大的OO设计租户:特别是代码重用/模块化和范围/隔离。现在,全球通常都会皱眉,因为它们不能很好地适应大规模的开发工作,并且总是导致问题,所以OO试图将任何给定调用的范围限制到执行该功能所需的最小范围。对于模块化/再利用,子模块越大,通常它变得越具体,并且因此如果它被分解成更多模块化块,则其越不适合所有目的。因此,您可以花更少的时间重写相同的代码以稍微调整目的,这也可以减少在实现新代码时可能破坏的相邻目的。这使得它的实现效率更高,尽管在运行时可能会或可能不会有一些微小的成本。可能不会。请记住,它不需要舔更多的二进制文件来运行Render(),无论它是在根模块中定义的还是在合成对象中组成深层的几层。它仍然只是一个函数指针。

这些只是一般的概念,所以把你喜欢什么。

希望帮助。

2

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

让我给你举个例子,因为你提到的“游戏”:

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

这些对象中的每一个都绑定到了你的世界,可能是通过某种高度数学的半条命2(源)级物理引擎。你不想编写每个类的“物理”。相反,你会从类(或接口)“IPhysics”继承。然后,无论何时将重力从10.0更改为15.0,该值都会在“世界”情景中传播。这是inheritance

如果你知道我的意思,那么你的游戏中的每个对象,比如Half-Life-2,Gordon Freeman可以同时作为“玩家”和“可以被脚本化”。这是多态性。一个对象使用不同的类型。

所以,你看,这是非常容易(和非常有效)模型和展示面向对象的虚构游戏。