面向对象的游戏开发被低估了吗?

我想了解用于游戏编程的面向对象的范例是不好的,还是只是一个城市的传说。

我的一个朋友正在开发一个使用面向数据的范例的HTML5和Javascript的游戏,他试图让我相信面向对象devise的问题。

他最好的例子是这样的:

“如果你有一棵树(游戏中的一个静态物体)和一个战士(一个可以执行一些动作的物体,比如动作,攻击等等),突然之间你决定把一个战士树放在你的游戏中,你怎么做它通过面向对象吗?“

他是对的还是低估了面向对象范式的“权力”?

Solutions Collecting From Web of "面向对象的游戏开发被低估了吗?"

如果你的编程语言支持多重inheritance,你可以inheritanceTree和Warrior并获得一个TreeWarrior。 C ++支持多重inheritance:

class TreeWarrior : public Warrior, public Tree{ ... }; 

在Java中,你不能这样做,因为它不支持多重inheritance。 编程语言如JavaScript的问题是没有types安全。

我不认为面向对象的编程语言是一个限制。 实际上,JavaScript是一种面向对象的编程语言。 我认为你的朋友想把Java当作限制。 虽然有一些技巧来模拟Java中的多重inheritance,但我同意它有点受限制。

为了回答他是否低估了面向对象范式的威力的问题,我想是的。 想想任何AAA游戏。 他们大多数是使用C ++编程的。

面向对象的范式并不是游戏开发的不好之处,他们做得很好。 尽管如此,用典型的面向对象的思维方式来完成所有的事情都是不利的。

1)不灵活,你不能在运行时重新组装游戏对象的行为和属性,因为它们是固定的类层次结构。

2)除非将OOP与面向数据的devise混合,否则速度会变慢。 把你的数据放在堆中可能松散的类是慢慢处理,同时保持一个给定的域的所有数据在连续的内存块将提供更快的迭代时间。

除此之外,如果你想在OOP范例中完成一个完整的游戏,那么从独立游戏到AAA游戏之前已经做了无数次,并且它已经工作了。 很有可能你会得出与其他人相同的结论,最终也会全面转向数据导向devise。 有了这个,我的意思大都是进入实体 – 组件系统范例,因为它似乎是当今AAA发展的金标准。

我个人使用一个完全成熟的ECS设置,然后通过句柄有一个OOP引用实体和组件的薄层,所以我有实用的方法来控制每种types的实体及其数据。 它像一个魅力。

在这里查看ECS的post: http : //bitsquid.blogspot.pt/我发现他们在现代开发中很多方面都很好。