我正在开发一款游戏。目前,我有一个类(游戏的环境)负责持有游戏对象(敌人,武器等)的集合并进行碰撞检查,调用对象的创建例程等。随着我的进步项目,我开始想知道我是否应该有一个更分层的方法 - 比如说WeaponsManager,EnemiesManager和环境把所有东西放在一起更好,或者让我的环境类操纵每个对象就像我一样我现在正在做什么?
值得一提的是,游戏对象已经相当分层:
BaseClass
-----EnemyClass
----------Enemy1Subclass
----------Enemy2Subclass
-----WeaponClass
----------Weapon1Subclass
----------Weapon2Subclass
BaseClass定义了基本对象属性,例如position。 EnemyClass和WeaponClass是相当通用的类,它们定义了更多特定于类的方法和属性,例如EnemyClass的速度或WeaponClass的损坏。它们大多存在,因此我可以拥有相当通用的集合,而不是针对每个敌人/武器类型的单独集合。 Enemy1Subclass / Enemy2Subclass和Weapon1Subclass / Weapon2Subclass是实际的敌人/武器类,实际上是创建和使用的。
My Environment类存储EnemyClass / WeaponClass的集合,并通过调用游戏对象的方法进行必要的操作。
Environment (manipulates EnemyClass and WeaponClass objects by iterating over their respective arrays and calling their respective methods; doesn't do any subclass-specific stuff)
-----EnemyClass array
----------Enemy1Subclass entry
----------Enemy2Subclass entry
----------Enemy1Subclass entry
-----WeaponClass array
----------Weapon1Subclass entry
----------Weapon2Subclass entry
----------Weapon2Subclass entry
但现在我想知道另一层分离是否是一个好主意,环境控制EnemyManager / WeaponManager类以及相应的经理持有和操纵他们的集合:
Environment (calls generic instantiation, destruction, moving, etc. methods in EnemyManager and WeaponManager; doesn't ever directly interact with an EnemyClass or WeaponClass object)
-----EnemyManager (gets instructions from Environment and manipulates EnemyClass objects to carry out those instructions)
----------EnemyClass array
---------------Enemy1Subclass entry
---------------Enemy2Subclass entry
---------------Enemy1Subclass entry
-----WeaponManager (gets instructions from Environment and manipulates WeaponClass objects to carry out those instructions)
----------WeaponClass array
---------------Weapon1Subclass entry
---------------Weapon2Subclass entry
---------------Weapon2Subclass entry
思考?建议?我无法找到任何关于这种“更多班级或更难工作的班级”的会议,所以任何答案都是公平的游戏,直到并包括“你的模型是垃圾,重新开始”。虽然希望不会那样。 ;)
答案 0 :(得分:2)
一般来说(非常普遍),面向对象语言的一个主要优点是封装 - 将相关功能/方法和数据组合在一起(具有适当的权限)的想法。在这里应用,这意味着,只要“有意义”,将代码分开就更好了。在您的示例中,“更难的工作类”意味着更大,更难以理解的类以及处理大量数据的类。两个很好的指导方针,涵盖了连续体的任何一面:
如果您注意到A类只包含仅包含方法C的B类,那么这可能都在一个函数内
总之,请尽量确保您的代码在合理的,不多余的部分中进行划分。
答案 1 :(得分:0)
请记住,在(几乎)所有节目中,清晰度是关键。
在这种情况下,做一些最直观的感觉。我发现,将程序和函数拆分成多个类通常是值得的,因为它提高了可维护性,并使代码更加明确。
但是,syntactic sugar和syntactic saccharin之间存在一条细线。换句话说,让您的组织尽可能整洁,但不要过度。做什么使你的代码最清楚。
在这种情况下,这似乎是interface
的好用。当您可以创建接口或抽象类的新实例时,尽量避免使用instanceof
。
答案 2 :(得分:0)
虽然在开始黑客攻击之前考虑一下架构是很好的 - 将编程看作是一个迭代过程。所以从最简单的事情开始,然后不断进行重构。这样你就不会过度使用并保持代码的可维护性。所以关于你的帖子标题,从一个班级开始工作开始,如果你到了提取某些东西是有意义的点,然后去做 - 今天的IDE将使你很容易。