【问题标题】:Good Entity Manager Handling - C# XNA/MonoGame良好的实体管理器处理 - C# XNA/MonoGame
【发布时间】:2017-09-11 12:11:09
【问题描述】:

我对 MonoGame/XNA 很陌生,对于我的第一个实际游戏,我想我会尝试重新创建太空入侵者。为了处理入侵者的运动,我创建了一个“InvaderManager”类来处理这一切。然后我创建了另一个名为“EntityManager”的类来处理所有其他类型的实体,例如子弹。

虽然这些类只能在我的“MainGame”类中访问,但它可以正常工作,该类处理实际的游戏含义,例如,当我希望“Bullet”类中的碰撞代码与一个入侵者发生碰撞时移除它(意味着它必须访问“InvaderManager”类),它变得有点尴尬,基本上导致我在这些管理器类中将函数设为静态,因此外部类可以在没有实例的情况下访问调用它们。

for(int i = 0; i < InvaderManager.spaceInvaders.Count; i++)
        {
            if(CollisionDetect(InvaderManager.spaceInvaders[i]))
            {
                EntityManager.Remove(this);
                InvaderManager.Remove(InvaderManager.spaceInvaders[i]);
            }
        }

这当然可行,但有些东西告诉我这不是一个好方法,所以我想我会问这个论坛是否有更好的方法来处理这一切?或者为了我所说的目的,将某些功能设为静态可以吗?

【问题讨论】:

  • 不要在每个类中处理该逻辑,该逻辑应该在您的游戏引擎中处理。这将使您的代码更快,并且您不会遇到这些问题。

标签: c# xna monogame


【解决方案1】:

当您使状态全局可见和可修改时,很快各种代码将访问和修改该状态,并且很难在不影响整个程序的情况下进行代码更改。

尽可能地限制可见性。

静态函数非常好。全局静态(如静态公共数组)通常不是。

如果您不确定某个类应该做什么,请不要编写该类。您的 InvaderManager 似乎只是一个实体列表。只需使用List 即可。

良好的面向对象设计很难,太空入侵者不需要它。从数据类型和函数而不是管理器类的角度考虑您的问题。

对于这样一个笼统的问题,很难给你更具体的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多